4

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

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

4

1 回答 1

2

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

这是一个链接

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

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

于 2016-04-13T12:54:28.853 回答