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

use*_*749 5 java serialization deserialization kryo

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

类定义:

class A{
private int c1;
  private Map<Integer, String> c2;
}
Run Code Online (Sandbox Code Playgroud)

序列化后我反序列化的很好,但是如果序列化后使用现有的定义,然后添加新字段作为

class A{
private int c1;
  private Map<Integer, String> c2;
private Map<Integer, String> c3;
}
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

我的代码在使用Kryopool时是线程安全的。kryo不支持架构演变。