当类添加新字段时,Kryo反序列化缓冲区下溢

时间:2018-02-21 03:30:14

标签: java serialization deserialization kryo

我有一个使用kryo-shaded 4.0.1序列化的java类

类定义:

class A{
private int c1;
  private Map<Integer, String> c2;
}

序列化后我反序列化它的罚款,但是如果使用现有定义进行血清化后再添加新字段

class A{
private int c1;
  private Map<Integer, String> c2;
private Map<Integer, String> c3;
}

然后尝试反序列化现有的序列化内容(使用旧定义序列化)抛出

com.esotericsoftware.kryo.KryoException: Buffer underflow.
Serialization trace:
....
at com.esotericsoftware.kryo.io.Input.require(Input.java:199)
    at com.esotericsoftware.kryo.io.Input.readVarInt(Input.java:373)
    at com.esotericsoftware.kryo.util.DefaultClassResolver.readClass(DefaultClassResolver.java:127)
    at com.esotericsoftware.kryo.Kryo.readClass(Kryo.java:693)
    at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:118)
    at com.esotericsoftware.kryo.serializers.FieldSerializer.read(FieldSerializer.java:543)
    at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:709)

我的代码是线程安全的,因为我正在使用Kryopool。 kryo不支持模式演变。

0 个答案:

没有答案