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 に何かが欠けているため、カスタム シリアライザーでこれを行うことができますが、それは間違ったトラックである可能性があります..

4

1 に答える 1

2

質問は3年前に尋ねられたので、これに対する回答を書くのはちょっとばかげていますが、kryoのreadmeファイルに直接記載されている解決策を見つけました

ここにリンクがあります

基本的にwriteObject(Output, Object)、独自のシリアライザーを提供せずに単純な呼び出しでオブジェクトをシリアライズする場合、引数のないコンストラクターを必要としないkryoデフォルトを使用します。FieldSerializer

メカニズムkryoを使用して呼び出す非引数のプライベート コンストラクターを提供できます。reflectionプライベートゼロ引数コンストラクターはアーキテクチャの原則に違反していないため、あなたが望んでいたことは適切な方法だと思います

于 2016-04-13T12:54:28.853 に答える