2013-01-22 18 views
9

Sto provando a serializzare un elenco di elenchi di alcuni oggetti (di una classe personalizzata: Elenco>), utilizzando Kryo.serializzazione lista 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(); 

Finora nessun problema, scrive fuori l'elenco senza errori. Ma quando provo a leggerla:

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

ottengo questo errore:

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

Come posso risolvere questo problema?

+0

Hai risolto questo problema? – expert

risposta

3

Secondo il vostro errore, si potrebbe desiderare di aggiungere un costruttore no-arg alla classe:

public class MyClass { 

    public MyClass() { // no-arg constructor 

    } 

    //Rest of your class.. 

} 
+0

Grazie per la risposta. Ma MyClass ha già un costruttore che accetta un argomento String. Qualche idea? – MAZDAK

+0

Aggiungi zero costruttore o scrivi il tuo serializzatore per creare l'oggetto. È possibile estendere FieldSerializer e sovrascrivere create. – NateS

5

Non è possibile utilizzare List.class quando leggere gli oggetti di nuovo, dal momento che List è un'interfaccia.

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

Hai ragione. E non abbiamo bisogno di lanciare. Ad esempio: 'Lista data = kryo.readObject (input, ArrayList.class);' –

Problemi correlati