Я пытаюсь использовать крио для сериализации и десериализации в двоичный код. Я думаю, что у меня работает сериализация, но я не могу десериализовать. Ниже приведен код, с которым я возился, но в конечном итоге я хочу сохранить byte[] и позже прочитать его снова. В документации показано только, как это сделать с файлами.
Kryo kryo = new Kryo();
kryo.register(ArrayList.class);
kryo.register(Modifier.class);
ByteArrayOutputStream b = new ByteArrayOutputStream();
Modifier modifier = new Modifier();
modifier.type = "Yo swa!";
modifier.amount = 10;
Output output = new Output(b);
kryo.writeClassAndObject(output, modifier);
System.out.println("Kryo size: " + output.toBytes().length);
Input input = new Input(output.getBuffer());
//Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 11, Size: 0
Modifier r = kryo.readObject(input, Modifier.class);
//Same error:
Modifier r = kryo.readObject(new Input(new ByteArrayInputStream(output.toBytes())), Modifier.class);
System.out.println(r.type);
b
? - person Dici   schedule 18.09.2015Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2
в той же строке. - person Madmenyo   schedule 18.09.2015toBytes
вместоgetBuffer
(см. документ javadox.com/com.esotericsoftware.kryo/kryo/2.23.0/com/), но я не думаю, что это является причиной вашей проблемы. . Что отображается вашим первымprintln
? - person Dici   schedule 18.09.2015Modifier r = kryo.readObject(new Input(new ByteArrayInputStream(output.toBytes())), Modifier.class);
все еще та же ошибка .. - person Madmenyo   schedule 18.09.2015writeClassAndObject
, но читаете сreadObject
. Вы должны писать сwriteObject
или читать сreadClassAndObject
- person Dici   schedule 18.09.2015Serializable
, имеет сериализаторы по умолчанию для тривиальных объектов данных и т. д.) - person Dici   schedule 19.09.2015.register
. Так что ему нужно только то, что в нем. Аnull
Integer
— это всего лишь 1 байт, кто бы мог подумать? :D - person Madmenyo   schedule 19.09.2015