2013-01-22 6 views
9

Ich versuche, eine Liste der Liste einiger Objekte (einer benutzerdefinierten Klasse: Liste>) mit Kryo zu serialisieren.Kryo-Liste Serialisierung

Bis jetzt kein Problem, schreibt es die Liste ohne Fehler aus. Aber , wenn ich versuche, es zu lesen:

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

ich diesen Fehler:

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

Wie kann ich dieses Problem lösen?

+0

Haben Sie dieses Problem gelöst? – expert

Antwort

3

nach Ihren Fehler, haben Sie vielleicht eine nicht-arg Konstruktor Ihrer Klasse hinzufügen möchten:

public class MyClass { 

    public MyClass() { // no-arg constructor 

    } 

    //Rest of your class.. 

} 
+0

Danke für Ihre Antwort. Aber MyClass hat bereits einen Konstruktor, der ein String-Argument annimmt. Irgendwelche Ideen? – MAZDAK

+0

Fügen Sie den Konstruktor null arg hinzu oder schreiben Sie Ihren eigenen Serializer, um das Objekt zu erstellen. Sie können FieldSerializer erweitern und create überschreiben. – NateS

5

Sie können nicht List.class verwenden, wenn Objekte wieder zu lesen, da List eine Schnittstelle ist.

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

Sie haben Recht. Und wir müssen nicht casten. Ie: 'Liste data = kryo.readObject (input, ArrayList.class);' –