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

时间:2013-01-24 10:57:43

标签: java serialization deserialization kryo

我最近一直在测试Kryo的序列化和反序列化,并且对它一直很满意,但是如何处理包含对象数组的类的(反)序列化并不清楚。该类包含final字段,因此我似乎无法使用默认的FieldSerializer(错误是“无法创建类(缺少no-arg构造函数)”,但是一个no-arg构造函数不适合最终的原语)。所以,给定班级

@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中遗漏了一些东西,这将让我在自定义序列化程序中执行此操作,但这可能是错误的轨道..

1 个答案:

答案 0 :(得分:0)

3年前问过这个问题,所以写这个答案有点傻,但我找到了一个解决方案,直接在kryo的自述文件中描述

这是一个link

基本上,当您通过简单调用writeObject(Output, Object)序列化对象而不提供自己的序列化程序时,kryo使用需要非参数构造函数的默认FieldSerializer

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