2011-09-12 48 views
1

我最近閱讀了一條評論,指出使用serialVersionUID爲同一類的不同版本提供兼容的序列化/反序列化不再需要從Java 5開始。它是否正確?也許它與協變返回類型混淆了。所以想和你們一起檢查一下。從Java 5起,不再需要serialVersionUID?

+0

你能發佈任何相關鏈接嗎? – Santosh

+0

不幸的是我無法訪問該鏈接。內容被刪除是可能的。 – shrini1000

回答

5

JavaDocs for Java 5還指出,它需要:

如果一個序列化類沒有顯式聲明的serialVersionUID,則序列化運行時將計算基於類的各個方面該類的默認的serialVersionUID值如Java(TM)對象序列化規範中所述。但是,強烈建議所有可序列化的類顯式聲明serialVersionUID值,因爲默認的serialVersionUID計算對類詳細信息高度敏感,這可能因編譯器實現而異,因此在反序列化期間可能會導致意外的InvalidClassException。因此,要確保跨不同的java編譯器實現保持一致的serialVersionUID值,可序列化的類必須聲明顯式的serialVersionUID值。還強烈建議顯式serialVersionUID聲明儘可能使用private修飾符,因爲這些聲明僅適用於立即聲明的類 - serialVersionUID字段作爲繼承成員是無用的。

+4

即使[Java 7文檔](http://download.oracle.com/javase/7/docs/api/java/io/Serializable.html)也具有相同的免責聲明。 –

3

從Java 1.4開始,您已經能夠使用XMLEncoder進行序列化,並且忽略了任何serialVersionUID,就像大多數其他序列化庫一樣。

但是,如果使用ObjectOutputStream,則其serialVersionUID的使用沒有改變。