我将旧的二进制数据序列化并存储在具有旧类'mypackage.Myclass'的数据库中
我想将此类重构为“ mypackage.topic.Myclass”,并且仍然能够读回二进制数据(反序列化)
我在以下情况下收到错误Classnotfound:
ois = new ObjectInputStream(bos);
o = ois.readObject();
mypackage.topic.Myclass myclass = (mypackage.topic.Myclass) o;
有没有一种方法可以强制readObject()匹配另一个类,然后匹配原始的序列化类?或其他这样做吗?
答案 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
时,反序列化类时不会出现错误。