2017-02-22 99 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萬億美元的機會。這被認爲(由設計師)是一個可接受的小概率。

相關問題