【发布时间】:2015-09-18 18:24:49
【问题描述】:
我正在尝试使用 kryo 序列化和反序列化为二进制文件。我想我有序列化工作,但我似乎无法反序列化。下面是我正在搞乱的代码,但最终我想存储一个 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是什么? -
@Dici ByteArrayOutputStream。如果我设置说字节 [100] 的输入流,我会在同一行得到
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2。 -
您应该使用
toBytes而不是getBuffer(请参阅文档javadox.com/com.esotericsoftware.kryo/kryo/2.23.0/com/…),但我认为这不是导致您的问题的原因。您的第一个println显示什么? -
@dici 数组的大小 (13)。这可能是对的吗?我正在序列化的类包含另一个 int。
-
@dici 我将错误行更改为:
Modifier r = kryo.readObject(new Input(new ByteArrayInputStream(output.toBytes())), Modifier.class);仍然是相同的错误..