【问题标题】:Kryo Deserialization fails with "KryoException: Buffer underflow"Kryo 反序列化失败并出现“KryoException:缓冲区下溢”
【发布时间】:2018-01-05 05:06:09
【问题描述】:

我使用 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) ?

【问题讨论】:

  • 我也面临同样的问题?这解决了吗?我尝试了以下建议,但没有帮助..

标签: java serialization io kryo


【解决方案1】:

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

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

【讨论】:

  • 对我有很大帮助!就我而言,我有 ByteArrayOutputStream stream1 = new ByteArrayOutputStream();和输出输出 1 = 输出(流 1)。目标是使用 kryo.writeClassAndObject(output, someObject); 将一些 Object 序列化为字节数组。重要的是调用 output1.close();在调用 stream1.toByteArray(); 之前希望这可以帮助某人节省尝试快速启动 Kryo 的时间!
  • 现代 kryo 确实在关闭前冲洗
【解决方案2】:

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

【讨论】:

【解决方案3】:

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

如果你还没有检查的话,只是想留下这个作为仅供参考。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-15
    • 2016-09-22
    • 1970-01-01
    • 2016-07-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多