2013-01-22 26 views
9

Kryo'yu kullanarak bazı nesnelerin bir listesini (özelleştirilmiş sınıfın: Liste>) serileştirmeye çalışıyorum.kryo listesi serileştirme

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

Şimdiye kadar sorun yok, listeyi hata olmadan yazıyor. Ama bunu okumaya çalıştığınızda:

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

bu hatayı alıyorum:

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

Bu sorunu nasıl çözebilir?

+0

Bu sorunu çözdünüz mü? – expert

cevap

3

Hatanızla göre, size sınıf no-arg yapıcı eklemek isteyebilirsiniz: List bir arayüz olduğundan, geri nesneleri okuduğumda

public class MyClass { 

    public MyClass() { // no-arg constructor 

    } 

    //Rest of your class.. 

} 
+0

Cevabınız için teşekkür ederiz. Ama MyClass zaten bir String argüman alır bir kurucu var. Herhangi bir fikir? – MAZDAK

+0

Sıfır arg kurucu ekleyin veya nesneyi oluşturmak için kendi serializer'ınızı yazın. FieldSerializer'ı genişletebilir ve oluşturmayı geçersiz kılabilirsiniz. – NateS

5

Sen List.class kullanamazsınız.

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

Haklısınız. Ve yayınlamamız gerekmiyor. Yani: 'List data = kryo.readObject (input, ArrayList.class);' –