kryo list serialization
Asked Answered
B

2

10

I am trying to serialize a List of List of some objects (of a customized class: List> ), using 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();

So far no problem, it writes out the list with no errors. But when I try to read it:

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

I get this error:

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

How can I solve this problem?

Burgh answered 22/1, 2013 at 12:18 Comment(1)
Did you solve this problem ?Gibbons
M
6

You can't use List.class when read objects back, since List is an interface.

k2.readObject(listRead,  ArrayList.class);
Mello answered 16/2, 2014 at 10:32 Comment(1)
You're right. And we don't need to cast. Ie: List<Fabri> data = kryo.readObject(input, ArrayList.class);Underplay
G
2

According to your error, you might want to add a no-arg constructor to your class:

 public class MyClass {

    public MyClass() {  // no-arg constructor

    }

    //Rest of your class..

 }
Gamez answered 22/1, 2013 at 12:23 Comment(2)
Thanks for your answer. But MyClass already has a constructor which takes one String argument. Any ideas?Burgh
Add zero arg constructor or write your own serializer to create the object. You can extend FieldSerializer and override create.Ingot

© 2022 - 2024 — McMap. All rights reserved.