java序列化使用Kryo中遇到的问题总结
问题1:
在使用Kryo进行序列化的时,反序列化过程中,Bufferflow
com.esotericsoftware.kryo.KryoException: Buffer underflow.
问题原因:
当进行读取数据时,读到最后时,没有读到数据,继续读取的时候,发生的错误
当我没有正确关闭输出/输入类型时,这发生在我身上。你需要确保Kryo冲洗除了 output.flush()或 output.close()。
其次,查看 kryo.writeClassAndObject()。然后,您可以执行 kryo.readClassAndObject()并将对象转换为它应该的类型。
原因是客户端和服务器端的kryo必须register同样的class类,某一端多register一个class类导致的
注意:你每次只读取一个字节,那就判断大于0就好了,如果不是一个记得修改条件哦!
总结
当 ByteBuffer.remaining() 小于要读取或写入的长度时,再执行读取或写入操作都会产生异常;
读取则产生 java.nio.BufferUnderflowException 异常,
写入则产生 java.nio.BufferOverflowException 异常。
当 ByteBuffer.remaining() 等于 0 时,不能再执行读取或写入操作,需要执行:clear() 操作,否则将产生异常。
解决方案:
在进行反序列化过程中,判断读取是否为0,如果是0,直接退出