Я пытаюсь использовать kryo для сериализации и десериализации в двоичном формате. Я думаю, что у меня работает сериализация, но я не могу десериализовать. Ниже приведен код, с которым я возился, но в конечном итоге я хочу сохранить байт [], а затем прочитать его снова. В документации только показано, как это сделать с файлами.Сериализация/десериализация Kryo
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'? – Dici
@ Dici ByteArrayOutputStream. Если я устанавливаю входной поток байта [100], я получаю «Исключение в потоке» main «java.lang.ArrayIndexOutOfBoundsException: -2' в той же строке. – Madmenyo
Вы должны использовать 'toBytes' вместо' getBuffer' (см. Документ http://javadox.com/com.esotericsoftware.kryo/kryo/2.23.0/com/esotericsoftware/kryo/io/Output.html#getBuffer% 28% 29), но я не думаю, что это не то, что вызывает вашу проблему. Что отображается вашим первым «println»? – Dici