Крио список сериализации

Я пытаюсь сериализовать список List некоторых объектов (настраиваемого класса: List>) с помощью 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();

Пока без проблем, выписывает список без ошибок. Но когда я пытаюсь это прочитать:

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

Я получаю такую ​​ошибку:

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

Как я могу решить эту проблему?


person MAZDAK    schedule 22.01.2013    source источник
comment
Вы решили эту проблему?   -  person expert    schedule 11.05.2013


Ответы (2)


Вы не можете использовать List.class при обратном чтении объектов, поскольку List - это интерфейс.

k2.readObject(listRead,  ArrayList.class);
person xiaowl    schedule 16.02.2014
comment
Ты прав. А кастовать нам не нужно. Т.е.: List<Fabri> data = kryo.readObject(input, ArrayList.class); - person Rod Lima; 19.11.2015

В соответствии с вашей ошибкой вы можете добавить в свой класс конструктор без аргументов:

 public class MyClass {

    public MyClass() {  // no-arg constructor

    }

    //Rest of your class..

 }
person Majid Laissi    schedule 22.01.2013
comment
Спасибо за Ваш ответ. Но у MyClass уже есть конструктор, который принимает один аргумент String. Любые идеи? - person MAZDAK; 22.01.2013
comment
Добавьте конструктор с нулевым аргументом или напишите свой собственный сериализатор для создания объекта. Вы можете расширить FieldSerializer и переопределить create. - person NateS; 26.11.2013