2012-05-22 38 views
1

可能重複:
Why should I bother about serialVersionUID?Java可串行化:serialVersionUID的重要性?

我使用的實現Serializable接口的類。 Eclipse給了我一個「無串行UID」的警告,但是寫和讀這個類的效果很好。我想知道具有UID的Serializable類的目的是什麼?這只是一種好的做法,否則我的班最終會不工作?它可以是任何數字?

+2

請閱讀http://stackoverflow.com/questions/285793/why-should-i-bother-about-serialversionuid – alegen

回答

5

使用不同的虛擬機或在不同的機器上對同一個類進行序列化和反序列化非常重要。 UID用於檢查你想要反序列化的類是否真的是你認爲它的類,所以如果你的代碼中的類有一個UID,並且序列化的類有不同的類,那麼de序列化將失敗。

沒有UID的類將由JVM自動提供一個類,但不能保證不同的JVM將同一個UID提供給同一個類。

Read the javadoc of the Serializable interface for more details.

它可以是任何數量?

理想情況下,應該有一些獨有的編號類的特定版本(如哈希),如果您更改您的類,它影響序列化領域(非transient),該UID需要改變。我認爲Eclipse可以爲您自動生成一個UID。

+1

我同意這一點。至於獨特性,它不需要在類中獨一無二,如果類以不兼容的方式改變,只需要改變它。由jvm創建的默認版本是哈希的原因是它對類級別的變化很敏感。 – jtahlborn

+0

@jtahlborn如果您有兩個具有相同UID的不同類,並且您試圖將其中一個解序列化爲另一個類,那麼會出現問題嗎? – trutheality

+0

你不能用標準的java序列化來做到這一點,因爲類的名字是串行數據的一部分。 – jtahlborn