3

On a project, we have several objects serialized. It will be necessary to use these objects on machine with different JVM (possibly different versions).

Our objects serialVersionUID are fixed and won't change, but we are concerned about the serialVersionUID of the JVM standard objects, for instance ArrayList/HashSet that are used in our serialized objects.

So the question is, can these serialVersionUID change between different versions of JVM or between different JVM ?

Or do we have to use another serialization mechanism to support different JVMs ?

4

2 回答 2

3

仅当类的更改与之前的序列化版本不兼容时,才应更改 serialVersionUID。

要查看哪些更改可能会破坏兼容性,请查看规范

我非常怀疑新版本的 Java 是否会对核心类进行任何会破坏兼容性的更改。

于 2013-07-25T10:12:35.430 回答
-1

我们serialVersionUID作为类的版本号使用,修改类的时候应该修改这个字段。该字段在反序列化中用作类的标识。

比如你序列化一个A类的对象并保存在一个二进制文件中,你可以稍后将文件反序列化为原始对象。但是如果你在 A 中添加一个字段并且不更改 serialVersionUID,反序列化可能会返回一个格式错误的对象。如果更改serialVersionUID,反序列化将拒绝输入并抛出异常。异常总比未知错误好。

当且仅当您使用旧的序列化结果来创建修改类的实例时,才会发生这些错误/异常。如果不使用序列化进行数据持久化,就不会有任何问题。

于 2013-07-25T11:10:16.447 回答