在一个项目中,我们序列化了几个对象。在具有不同JVM (可能是不同版本)的机器上使用这些对象是必要的。
我们的对象serialVersionUID是固定的,不会改变,但是我们关心的是serialVersionUID标准对象的serialVersionUID,例如在序列化对象中使用的ArrayList/HashSet。
所以问题是,这些serialVersionUID在不同版本的JVM之间或者在不同JVM之间可以改变吗?
还是必须使用另一种序列化机制来支持不同的JVM?
发布于 2013-07-25 10:12:35
只有当对类的更改与以前序列化的serialVersionUID版本不兼容时,才应该更改它。
要查看哪些更改可能破坏兼容性,请检查规格说明
我非常怀疑新版本的Java是否会对核心类引入任何可能破坏兼容性的更改。
发布于 2013-07-25 11:10:16
我们使用serialVersionUID
作为类的版本代码,在修改类时应该更改这个字段。此字段用作反序列化中类的标识。
例如,序列化A类的对象并将其保存在二进制文件中,以后可以将文件反序列化为原始对象。但是,如果将字段添加到A而不更改serialVersionUID,反序列化可能会返回格式错误的对象。如果更改serialVersionUID
,反序列化将拒绝输入并抛出异常。异常比未知的错误好。
如果使用旧的序列化结果来创建修改过的类的实例,则会发生这些错误/异常。如果您不使用序列化进行数据持久性,就不会有任何问题。
https://stackoverflow.com/questions/17854825
复制相似问题