在Kryo中序列化和反序列化对象数组

4

最近我一直在测试Kryo用于序列化和反序列化,总体上对它感到满意,但是如何处理包含对象数组的类的(反)序列化并不清楚。该类包含final字段,因此我似乎无法使用默认的FieldSerializer(错误为“无法创建类(缺少无参构造函数)”,但是无参构造函数对于final基本类型是不合适的)。所以,考虑到这个类:

@AllArgsConstructor
public class DataObject{
     private final double field1;
     private final double field2;
     private SubObject[] children;
}

@AllArgsConstructor
public class SubObject{
     private final double field1;
     private final double field2;
}

如何高效地编写一个序列化/反序列化程序来处理这个问题?我的假设是在com.esotericsoftware.kryo.io.Input中可能会有一些我需要的自定义序列化程序,但这可能是错误的思路...


2
仅使用kryo.writeObject()和kryo.readObject()有什么问题?也就是说,为什么你需要在Kyro之上编写自己的序列化呢? - Paul Wagland
有相同的问题 - Mike Herasimov
1个回答

2

这个问题是3年前提出的,所以写答案有点无聊,但我在 kryo 的 readme 文件中找到了一个解决方案。

这里有一个链接

基本上,当你通过简单调用 writeObject(Output, Object) 来序列化对象时,如果没有提供自己的序列化程序,kryo 就会使用默认的 FieldSerializer,它需要一个非参数构造函数。

你可以提供一个私有的非参数构造函数,kryo 将使用 reflection 机制调用它。我认为这是实现你想要的功能的一种合适的方式,因为私有的零参数构造函数不违反架构原则。


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