当类添加新字段时,Kryo 反序列化不起作用

问题描述 投票:0回答:0

我有一个使用 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 反序列化即使使用旧的序列化字节也能正常工作

java serialization deserialization kryo
© www.soinside.com 2019 - 2024. All rights reserved.