Kryo反序列化失败,出现“KryoException:Buffer underflow”

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

这是我的反序列化:

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

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

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

  • 有没有办法创建Object而不将类赋予readObject(…,ClassName)?

当我没有正确关闭输出/输入类型时,这发生在我身上。 除了执行output.flush()output.close()你需要确保Kryo刷新所有内容。

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

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

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

如果你还没有检查,只是想把它作为一个FYI。