1

在实现Serializable接口时,在Java中,我们需要设置它的serialVersionUID长度。

是否应该选择默认或自动生成的 long 有什么区别?

什么时候应该优先于另一个?

如果选择了自动生成的长,如果更改,是否应该在事件类中更改?换句话说,分配给 serialVersionUID 的值.. 它与类的当前结构以及在那里声明的字段和方法有关吗?

private static final long   serialVersionUID    = 1L;
private static final long   serialVersionUID    = 6749067740891125834L;
4

2 回答 2

2

默认和自动生成的 long 之间的主要区别在于,自动生成的序列版本 UID 是基于对象的字段。如果您有没有版本 ID 的对象的持久化副本,那么使用生成的版本可以帮助确保与已持久化的对象的兼容性。因此,我倾向于使用生成的版本。无论哪种情况,如果进行了不兼容的更改,您都需要更新版本 ID。

http://docs.oracle.com/javase/1.5.0/docs/guide/serialization/spec/version.html 5.6.1 和 5.6.2 节描述了哪些更改是兼容的以及哪些更改会破坏序列化。

于 2012-07-04T03:37:14.103 回答
1

序列号版本 UID 可以是任意数字,其值没有具体含义。

从 1 开始并在每次格式更改时递增它是有意义且方便的。

但是,如果您从一开始就考虑过,您只能这样做。如果您已经拥有需要继续读取的现有数据,则此数据将具有自动生成的 ID。在这种情况下,您别无选择,只能匹配该值。

于 2012-07-04T03:36:42.463 回答