我们有一个非常古老的类,它没有 serialVersionUID。
4 年前,有人用随机值将 serialVersionUID 添加到此类。他应该使用serialver工具来查找值并在添加serialVersionUID时使用它,但事实并非如此。
有客户使用这个类的两个版本。
现在,如果我想反序列化老客户的对象,有什么办法。我无法更改当前的 serialVersionUID,因为新客户会受到影响。
我们有一个非常古老的类,它没有 serialVersionUID。
4 年前,有人用随机值将 serialVersionUID 添加到此类。他应该使用serialver工具来查找值并在添加serialVersionUID时使用它,但事实并非如此。
有客户使用这个类的两个版本。
现在,如果我想反序列化老客户的对象,有什么办法。我无法更改当前的 serialVersionUID,因为新客户会受到影响。
您必须编写自己的readObject()
方法来处理不同的 UID。
“可序列化对象的版本控制”解释了 UID 的含义和规则是什么。
我试图找到一个很好的例子,如何为readObject()
具有多个 UID 但找不到任何 UID 的对象编写代码。Joshua Bloch 的“Effective Java”中甚至没有一个例子。它只是说“如果你更改 UID,你会得到一个错误”,而不是如何优雅地处理这个错误。