为什么使用随机数作为串行版UID?

时间:2013-02-20 23:05:11

标签: java serialization

编辑:随机我指的是一个大的计算数字,对我们来说没有语义含义作为开发人员

实现Serializable接口时,最佳做法是指定串行版UID非常重要。在很多地方,我经常看到使用随机数字。 E.g。

Effective Java(第2版)第312页:

private static final long serialVersionUID = 234098243823485285L;

来自Java 6中的String类:

private static final long serialVersionUID = -6849794470754667710L;

来自Java 6中的ArrayList类:

private static final long serialVersionUID = 8683452581122892189L;

等。甚至eclipse提供了生成这些随机数的选项(尽管主要默认似乎是生成1L的serialVersionUID)

为什么要使用随机数?从1L开始并且当它像任何合理的版本控制一样变化时增加到2L是不是更有意义?我唯一能想到使用看似随机的数字的方法是,如果您没有指定serialVersionUID,并且现在想要这样做(这会将您绑定到运行时自动生成的版本以提供向后兼容性支持)。

2 个答案:

答案 0 :(得分:10)

这些“随机”数字可能是根据Java Object Serialization Specification自动以“当前”形式为类生成 的数字...其中“当前”是“当时serialVersionUID的当前首次宣布为”。

这将允许先前已序列化的数据仍然反序列化 - 同时向前推进更明确的声明,以便在将来中断更改。

答案 1 :(得分:3)

它们几乎肯定是不是随机数,而是serialver工具的输出。