使用kryo进行序列化各种异常分析解决

使用kryo进行序列化时遇到了不少异常:

于是决定采用多线程的测试代码彻底分析解决一下各种异常:

异常以及解决方案如下:

1.  Exception in thread "main" com.esotericsoftware.kryo.KryoException: Buffer overflow. Available: 0, required: 3

类似上面这种异常,是因为序列化时候使用的Output output = new Output(1, maxBufferSize);,其中maxBuffersize这个参数设置过小导致缓冲区溢出,设置-1的话表示无线大的缓冲区,

所以如果无法估计缓冲区的大小,那些就这样使用Output output = new Output(1, -1);并记得在 bytes = output.toBytes();之前使用output.flush();刷新缓冲区

2. Exception in thread "Thread-2" com.esotericsoftware.kryo.KryoException: Unable to find class:
基本是因为序列化的时候简单使用了writeObject(output, object);这应该是kryo自己的问题,这里换用writeObjectOrNull(output, object, type);即写入对象的时候顺便把序列化的Class类型传进去即可.

3. Exception in thread "Thread-3" Exception in thread "Thread-1"

   com.esotericsoftware.kryo.KryoException: java.lang.IndexOutOfBoundsException: Index: 104, Size: 13

这多半是由于多线程共享一个kryo实例造成的,这样的话在每个线程下面各新建一个自己的kryo实例就行了



你可能感兴趣的:(编程相关,java)