2013-01-22 23 views
9

Próbuję serializować listę list niektórych obiektów (niestandardowej klasy: Lista>), używając Kryo.serializacja list w katalogach

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(); 

Do tej pory nie ma problemu, wypisuje listę bez błędów. Ale gdy próbuję go przeczytać:

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

otrzymuję ten błąd:

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

Jak mogę rozwiązać ten problem?

+0

Czy rozwiązałeś ten problem? – expert

Odpowiedz

3

Według swój błąd, może chcesz dodać konstruktora nie-Arg do swojej klasie:

public class MyClass { 

    public MyClass() { // no-arg constructor 

    } 

    //Rest of your class.. 

} 
+0

Dzięki za odpowiedź. Ale MyClass ma już konstruktor, który przyjmuje jeden argument String. Jakieś pomysły? – MAZDAK

+0

Dodaj zerowy konstruktor arg lub napisz własny serializator, aby utworzyć obiekt. Możesz rozszerzyć FieldSerializer i nadpisać tworzenie. – NateS

5

Nie można używać List.class podczas odczytu obiektów z powrotem, ponieważ List jest interfejsem.

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

Masz rację. I nie musimy rzucać. Tj .: Lista data = kryo.readObject (input, ArrayList.class); ' –