我认为这会抛出一个错误,说明次要版本号;但它没有。并且工作正常。谁能指出,为什么这行得通?
我在 java 1.7 上运行的应用程序中创建了一个 hashMap,将其序列化并将其发送到使用 jdk 1.6 的应用程序。接收方应用程序能够毫无错误地获取内容。
我认为这会抛出一个错误,说明次要版本号;但它没有。并且工作正常。谁能指出,为什么这行得通?
我在 java 1.7 上运行的应用程序中创建了一个 hashMap,将其序列化并将其发送到使用 jdk 1.6 的应用程序。接收方应用程序能够毫无错误地获取内容。
这就是serialVersionUID
属性发挥作用的地方。
在HashMap
Java 版本 6.0 和 7.0 的类serialVersionUID
中,如下所示:
private static final long serialVersionUID = 362498820763181265L;
这意味着没有对类进行任何更改,这会改变对象的序列化方式,因此如果使用不同版本的 Java 来序列化/反序列化对象,则不会出现错误,两者都能够正确序列化/反序列化对象。
此外,即使是 Java 8.0 的HashMap和Java 5.0(甚至1.4 )也具有相同的串行版本 UID,这意味着您可以毫无问题地使用 Java 1.4-5-6-7-8 读/写 s。HashMap