我有一个使用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不支持模式演变。