1

我最近读到一条评论说,从 Java 5 开始,不再需要使用 serialVersionUID 来使同一类的不同版本兼容序列化/反序列化。这个对吗?也许它与协变返回类型混淆了。所以想和大家一起看看。

4

2 回答 2

5

Java 5的JavaDocs仍然声明它是必需的:

如果可序列化类没有显式声明 serialVersionUID,则序列化运行时将根据类的各个方面为该类计算默认的 serialVersionUID 值,如 Java(TM) 对象序列化规范中所述。但是,强烈建议所有可序列化的类都显式声明 serialVersionUID 值,因为默认的 serialVersionUID 计算对类细节高度敏感,这些细节可能因编译器实现而异,因此可能在反序列化期间导致意外的 InvalidClassExceptions。因此,为了保证在不同的 java 编译器实现中具有一致的 serialVersionUID 值,可序列化的类必须声明一个显式的 serialVersionUID 值。

于 2011-09-12T08:27:51.867 回答
3

从 Java 1.4 开始,您已经能够使用XMLEncoder进行序列化,这会忽略任何 serialVersionUID,就像大多数其他序列化库一样。

但是,如果您使用 ObjectOutputStream,它对 serialVersionUID 的使用并没有改变。

于 2011-09-12T09:12:48.720 回答