首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >java标准对象的serialVersionUID可以改变吗?

java标准对象的serialVersionUID可以改变吗?
EN

Stack Overflow用户
提问于 2013-07-25 10:00:16
回答 2查看 961关注 0票数 3

在一个项目中,我们序列化了几个对象。在具有不同JVM (可能是不同版本)的机器上使用这些对象是必要的。

我们的对象serialVersionUID是固定的,不会改变,但是我们关心的是serialVersionUID标准对象的serialVersionUID,例如在序列化对象中使用的ArrayList/HashSet。

所以问题是,这些serialVersionUID在不同版本的JVM之间或者在不同JVM之间可以改变吗?

还是必须使用另一种序列化机制来支持不同的JVM?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-07-25 10:12:35

只有当对类的更改与以前序列化的serialVersionUID版本不兼容时,才应该更改它。

要查看哪些更改可能破坏兼容性,请检查规格说明

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

票数 3
EN

Stack Overflow用户

发布于 2013-07-25 11:10:16

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

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17854825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档