16

我使用 Kryo 将对象写入字节数组。它工作正常。但是当字节数组转换为对象时,它会抛出com.esotericsoftware.kryo.KryoException: Buffer underflow.异常。

这是我的反序列化:

        Kryo k=new Kryo();
        Input input=new Input(byteArrayOfObject);           
        Object o=k.readObject(input,ObjectClass.class);

此外,始终无法在我的应用程序中定义对象类型。在最后的过程中,发生了类转换。所以,

  • 如何解决上述反序列化错误

  • 有没有办法在不将类放入 readObject(...,ClassName) 的情况下创建 Object ?

4

3 回答 3

17

当我没有正确关闭输出/输入类型时,这发生在我身上。你需要确保 Kryo 刷新除了做output.flush()or之外的所有东西output.close()

二是看进去kryo.writeClassAndObject()。然后,您可以执行kryo.readClassAndObject()并将您的对象转换为它应该是的类型。

于 2015-02-28T23:44:46.370 回答
4

当我在多个线程中使用序列化程序时,这发生在我身上。它不是线程安全的,所以如果你以这种方式使用它,它可能会给你“缓冲区下溢”或其他异常。

于 2016-05-02T22:19:09.723 回答
3

由于真正的 Java 序列化问题,我看到了这个错误;我的类定义在生产者和消费者端(两个不同的应用程序)不同,因此我得到了这个异常。

如果您还没有检查,只是想将此作为仅供参考。

于 2018-01-04T21:06:09.327 回答