2017-02-22 80 views
0

这是否意味着我们可以拥有单个类的所有版本号?我不假设。我看到它比原始要短得多。为什么serialVersionUID的类型为Serializable类的long类型

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

+0

[什么是serialVersionUID,为什么要使用它?]可能的重复(http://stackoverflow.com/questions/285793/what-is-a-serialversionuid-and-why-should-i-use-它) – Akshay

+0

它没有说明为什么我们应该有一个长期的价值。 – javadev

回答

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 。这大约有40亿的一次机会。这个机会太大了。使用64位UID值时,更改为2中的一个。这大约有一个16万亿美元的机会。这被认为(由设计师)是一个可接受的小概率。

相关问题