2013-01-22 10 views
9

私は、Kryoを使用して(リストのカスタマイズされたクラスの)いくつかのオブジェクトのリストをシリアライズしようとしています。kryoリストのシリアル化

list2D; // List<List<MyClass>> which is already produced. 

Kryo k1 = new Kryo(); 
Output output = new Output(new FileOutputStream("filename.ser")); 
k1.writeObject(output, (List<List<Myclass>>) list2D); 
output.close(); 

これまでのところ問題なく、エラーなしでリストを書き出します。 しかし、私はそれを読んしようとすると:

Kryo k2 = new Kryo(); 
Input listRead = new Input(new FileInputStream("filename.ser")); 
List<List<Myclass>> my2DList = (List<List<Myclass>>) k2.readObject(listRead, List.class); 

を私はこのエラーを取得する:

Exception in thread "main" com.esotericsoftware.kryo.KryoException: Class cannot be created (missing no-arg constructor): java.util.List 

どのように私はこの問題を解決することができますか?

+0

この問題を解決しましたか? – expert

答えて

3

あなたのエラーによると、あなたはあなたのクラスに引数なしのコンストラクタを追加したい場合があります:

public class MyClass { 

    public MyClass() { // no-arg constructor 

    } 

    //Rest of your class.. 

} 
+0

あなたの答えをありがとう。しかし、MyClassには既に1つのString引数を取るコンストラクタがあります。何か案は? – MAZDAK

+0

ゼロのargコンストラクタを追加するか、独自のシリアライザを作成してオブジェクトを作成します。 FieldSerializerを拡張してcreateをオーバーライドすることができます。 – NateS

5

Listはインターフェイスであるため、あなたは、バックList.class読み込まれたオブジェクトを使用することはできません。

k2.readObject(listRead, ArrayList.class); 
+0

あなたはそうです。私たちはキャストする必要はありません。つまり、リスト data = kryo.readObject(input、ArrayList.class); ' –

関連する問題