重构类后读取二进制数据

时间:2019-03-29 07:35:12

标签: java serialization

我将旧的二进制数据序列化并存储在具有旧类'mypackage.Myclass'的数据库中

我想将此类重构为“ mypackage.topic.Myclass”,并且仍然能够读回二进制数据(反序列化)

我在以下情况下收到错误Classnotfound:

                    ois = new ObjectInputStream(bos);
                    o = ois.readObject();
mypackage.topic.Myclass myclass = (mypackage.topic.Myclass) o;

有没有一种方法可以强制readObject()匹配另一个类,然后匹配原始的序列化类?或其他这样做吗?

1 个答案:

答案 0 :(得分:0)

您可以通过创建一个名为mypackage.Myclass的数据包装器类来解决此问题。反序列化二进制数据时,您可以首先尝试将其反序列化为mypackage.topic.Myclass。如果失败,则将其反序列化为mypackage.Myclass,然后将其转换为类mypackage.topic.Myclass

您还可以将serialVersionUID的{​​{1}}设置为mypackage.topic.Myclass的{​​{1}}。如果您不知道类serialVersionUID的{​​{1}},或者没有设置mypackage.Myclass,则可以生成serialVersionUID,这可能是由JVM使用以下命令自动创建:mypackage.Myclass(请参阅:Java - Modifying serialVersionUID of binary serialized object

当类具有相同的serialVersionUID时,反序列化类时不会出现错误。