4

我认为这会抛出一个错误,说明次要版本号;但它没有。并且工作正常。谁能指出,为什么这行得通?

我在 java 1.7 上运行的应用程序中创建了一个 hashMap,将其序列化并将其发送到使用 jdk 1.6 的应用程序。接收方应用程序能够毫无错误地获取内容。

4

1 回答 1

12

这就是serialVersionUID属性发挥作用的地方。

HashMapJava 版本 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

于 2014-08-26T09:18:06.537 回答