Java序列化:如果serialVersionUID更新错误并且已经发布,任何解决方案。
我们有一个非常旧的类,它没有serialVersionUID 4年前,有人用随机值将serialVersionUID添加到此类。他应该使用serialver工具来查找值,并在添加serialVersionUID时使用它,但事实并非如此 有客户同时使用此类的两个版本Java序列化:如果serialVersionUID更新错误并且已经发布,任何解决方案。,java,serialization,serialversionuid,Java,Serialization,Serialversionuid,我们有一个非常旧的类,它没有serialVersionUID 4年前,有人用随机值将serialVersionUID添加到此类。他应该使用serialver工具来查找值,并在添加serialVersionUID时使用它,但事实并非如此 有客户同时使用此类的两个版本 现在,如果我想反序列化老客户的对象,有什么办法吗。我无法更改当前serialVersionUID,因为新客户将受到影响 您必须编写自己的readObject()方法来处理不同的UID “”解释UID的含义和规则 我试图找到一个很好的
现在,如果我想反序列化老客户的对象,有什么办法吗。我无法更改当前serialVersionUID,因为新客户将受到影响 您必须编写自己的
readObject()
方法来处理不同的UID
“”解释UID的含义和规则
我试图找到一个很好的例子,如何为一些具有多个UID但找不到任何UID的对象编写readObject()
。约书亚·布洛赫的《有效的Java》中甚至没有一个例子。它只是说“如果您更改UID,您将得到一个错误”,而不是如何优雅地处理这个错误
这个问题至少很接近:创建另一个具有相同形状和正确原始ID的类?将对象称为对象,然后查看您拥有的内容?强烈怀疑编写自己的readObject是否有效。在调用该成员函数(readObject)之前,先检查“serialVersionUID”。您找不到示例的可能原因是,它不是这样工作的。刚刚经历了一场考验,我们跳过了为1类设置serialVersionUID。当类实现除了添加readObject/writeObject之外保持不变时,将调用成员。一旦添加serialVersionUID的静态声明,就不再调用成员函数。@digitaldaemon请证明“在调用[…]readObject之前已检查“serialVersionUID”,例如,使用指向某些源代码的链接。