当前位置:  开发笔记 > 编程语言 > 正文

在Java中扩展Serializable类时,我选择serialVersionUID是否重要?

如何解决《在Java中扩展Serializable类时,我选择serialVersionUID是否重要?》经验,为你挑选了2个好方法。

我正在扩展一个实现Serializable接口的类(ArrayBlockingQueue).Sun的文档(和我的IDE)告诉我,我应该设置这个值以防止恶作剧:

但是,强烈建议所有可序列化类显式声明serialVersionUID值,因为默认的serialVersionUID计算对类细节高度敏感,这些细节可能因编译器实现而异,因此在反序列化期间可能导致意外的InvalidClassExceptions.

现在,我不在乎放在那里的价值.有关系吗?



1> Jon Skeet..:

否 - 只要您在正确的时间更改它(即当您进行影响序列化的更改,例如删除字段时),您使用的值无关紧要.

为简单起见,我建议从0开始,每次需要时将其增加1.

该序列化规范进行了详细介绍.


@ryvantage:如果你明确设置了一个id,但是在你应该的时候没有改变它,然后将数据从旧版本发送到新版本,反之亦然,你可能最终会得到无声的损坏数据或不明确的错误信息.不要那样做.目的是不仅避免错误,而且还会在您做不安全的事情时引发错误.
@Matthieu:是的,我认为这是对的.

2> GaryF..:

对serialVersionUID唯一重要的是该类的二进制兼容的序列化版本具有相同的serialVersionUID; 也就是说,如果你没有对类的序列化形式进行任何重大更改,那就没关系了.

当然,更好的选择是使用序列化提供给您的高级选项,以便永远不会有任何重大更改.我建议阅读readResolve()等.有效的Java详细介绍了该领域的一些棘手问题.

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有