为什么serialVersionUID对于Serializable类来说类型为long

时间:2017-02-22 11:02:54

标签: java serialization deserialization

这是否意味着我们可以为单个类提供所有这些版本的数量?我假设没有。我看到它的原始时间要短得多。

What is a serialVersionUID and why should I use it?没有说明为什么实施这种机制的家伙选择它是一个很长的价值。

1 个答案:

答案 0 :(得分:1)

serialVersionUID的类型应为long,因为它是指定的方式。见http://docs.oracle.com/javase/8/docs/platform/serialization/spec/class.html(特别是第4.6节)

UID为64位的原因是,如果(例如)使用32位值,则意外UID冲突的风险会太高。

默认的串行版本UID生成方案基于类方法和字段创建哈希。有一个小但非零,两个不同的类将具有相同的默认UID。如果发生这种情况,那么反序列化器可能不会注意到对象的序列化形式与我们尝试反序列化的类不兼容。然后会发生不好的事情。

如果使用32位UID,则两个不兼容的类具有相同UID的可能性将是2 32 中的一个。那是40亿左右的一次机会。这太大了。对于64位UID值,更改是2 64 中的一个。那是16千万亿的一次机会。 (被设计师)认为这是一个可接受的小概率。