我有一个使用 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。 即使 POJO 类中有新字段,如何使 kryo 反序列化即使使用旧的序列化字节也能正常工作