【发布时间】:2014-10-19 13:15:47
【问题描述】:
我认为这会引发错误,说明次要版本号;但它没有。并且工作正常。谁能指出,为什么会这样?
我在 java 1.7 上运行的应用程序中创建了一个 hashMap,将其序列化并将其发送到使用 jdk 1.6 的应用程序。接收方应用程序能够正确获取内容。
【问题讨论】:
标签: java serialization deserialization serialversionuid
我认为这会引发错误,说明次要版本号;但它没有。并且工作正常。谁能指出,为什么会这样?
我在 java 1.7 上运行的应用程序中创建了一个 hashMap,将其序列化并将其发送到使用 jdk 1.6 的应用程序。接收方应用程序能够正确获取内容。
【问题讨论】:
标签: java serialization deserialization serialversionuid
这就是serialVersionUID 属性发挥作用的地方。
在 Java 版本 6.0 和 7.0 的 HashMap 类中,serialVersionUID 如下:
private static final long serialVersionUID = 362498820763181265L;
这意味着没有对类进行任何更改,这会改变对象的序列化方式,因此如果使用不同版本的 Java 来序列化/反序列化对象,则不会出现错误,两者都能够正确序列化/反序列化对象。
此外,即使是 Java 8.0 也有 same serial version UID for HashMap 和 Java 5.0(甚至是 1.4),这意味着您可以使用 Java 1.4-5-6-7-8 读取/写入 HashMaps 而无需任何问题。
【讨论】: