如何将对象转换为字节数组(任何对象转换为int列表)

5
如何将对象转换为列表(字节数组) 我有一个来自MyClass类的实例(某个对象),我想从该对象获取字节。如何实现?
代码:
class MyClass {}

var myClass = MyClass()

List<int> getBytesFromObject(Object object) {
    // ??? what here should be ???
}

// so I can use it like:
List<int> bytes = getBytesFromObject(myClass)
3个回答

3

正如 @julemand101 所提到的,没有内置的方法可以魔法般地为您序列化对象。无论您是想将其序列化为某个字符串还是二进制格式,都需要选择哪些类字段是用于持久化的,哪些是暂时的。当涉及到反序列化时,您必须深入思考哪些字段是重建对象所必需的。

关于二进制序列化:我尽量避免重复造轮子。在 pub.dev 上有一些包可能是帮助您的好选择,例如:

你需要决定你的用例提出了哪些需求,以及哪个包可以满足给定的约束条件。对于通用且未来可靠的解决方案,您需要查看 Google Protobuf:它还提供二进制序列化,并且实际上通过要求您在 .proto 文件中指定要序列化的信息,将代码生成从您的肩膀上卸下,然后 protoc 编译器会为您生成所需的代码。 我的用例要求我实现特定的二进制输出文件格式,但如果我有选择,我会使用 Protobuf

2
没有内置的方式将Dart对象序列化为二进制。但是您可以将Dart对象转换为JSON字符串,然后将此字符串转换为字节数组(稍后将字节数组转换回字符串并将该字符串转换为对象)。这两个步骤都是“dart:convert”包的一部分。

https://api.dartlang.org/stable/2.2.0/dart-convert/json-constant.html

https://api.dartlang.org/stable/2.2.0/dart-convert/utf8-constant.html

请注意,您需要在自定义类上手动实现“toJson()”方法。有一些包可以帮助您生成必要的代码:

https://pub.dartlang.org/packages/json_serializable


-2

您可以使用Java的流(stream)概念,它基本上允许您将任何对象转换为一个数组,然后使用方法Arrays.asList()将其转换为列表。以下是一个简单示例:

 List objectToList(Object obj){
           ByteArrayOutputStream bos = new ByteArrayOutputStream();       
           ObjectOutputStream oos = new ObjectOutputStream(bos);       
           oos.writeObject(obj); 
           byte [] data = bos.toByteArray();
           return data.asList();

   }

Ezio,我该如何使用Dart实现这个功能?我不太确定。你能否提供一个示例呢? - Vladyslav
对不起,我不能帮助你...我以为你在使用Java :( - Ezio
Arrays.asList是一个静态方法,你不能在Array的实例上调用它。 - Ferrybig
这是一个 Dart 问题。 - Aegletes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接