Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java序列化:如果serialVersionUID更新错误并且已经发布,任何解决方案。_Java_Serialization_Serialversionuid - Fatal编程技术网

Java序列化:如果serialVersionUID更新错误并且已经发布,任何解决方案。

Java序列化:如果serialVersionUID更新错误并且已经发布,任何解决方案。,java,serialization,serialversionuid,Java,Serialization,Serialversionuid,我们有一个非常旧的类,它没有serialVersionUID 4年前,有人用随机值将serialVersionUID添加到此类。他应该使用serialver工具来查找值,并在添加serialVersionUID时使用它,但事实并非如此 有客户同时使用此类的两个版本 现在,如果我想反序列化老客户的对象,有什么办法吗。我无法更改当前serialVersionUID,因为新客户将受到影响 您必须编写自己的readObject()方法来处理不同的UID “”解释UID的含义和规则 我试图找到一个很好的

我们有一个非常旧的类,它没有serialVersionUID

4年前,有人用随机值将serialVersionUID添加到此类。他应该使用serialver工具来查找值,并在添加serialVersionUID时使用它,但事实并非如此

有客户同时使用此类的两个版本


现在,如果我想反序列化老客户的对象,有什么办法吗。我无法更改当前serialVersionUID,因为新客户将受到影响

您必须编写自己的
readObject()
方法来处理不同的UID

“”解释UID的含义和规则

我试图找到一个很好的例子,如何为一些具有多个UID但找不到任何UID的对象编写
readObject()
。约书亚·布洛赫的《有效的Java》中甚至没有一个例子。它只是说“如果您更改UID,您将得到一个错误”,而不是如何优雅地处理这个错误


这个问题至少很接近:

创建另一个具有相同形状和正确原始ID的类?将对象称为对象,然后查看您拥有的内容?强烈怀疑编写自己的readObject是否有效。在调用该成员函数(readObject)之前,先检查“serialVersionUID”。您找不到示例的可能原因是,它不是这样工作的。刚刚经历了一场考验,我们跳过了为1类设置serialVersionUID。当类实现除了添加readObject/writeObject之外保持不变时,将调用成员。一旦添加serialVersionUID的静态声明,就不再调用成员函数。@digitaldaemon请证明“在调用[…]readObject之前已检查“serialVersionUID”,例如,使用指向某些源代码的链接。