2011-04-07 22 views

回答

8

the doc for java.ioSerializable

序列化運行時相關聯,每個序列化類版本號,稱爲的serialVersionUID,其被反序列化過程用於驗證序列化對象的發送者和接收者都加載的類爲對於序列化兼容的對象。如果接收者已經爲具有與相應的發送者類不同的serialVersionUID的對象加載了一個類,那麼反序列化將導致InvalidClassException。可序列化類可以通過聲明名爲"serialVersionUID"字段必須是靜態的,最終明確宣佈了自己的serialVersionUID,並鍵入長

3

你問爲什麼一個UID?

因此它知道兩個序列化的對象是否相互兼容。你可能已經改變了界面/方法/等。

UID是(確實相當不起眼的)合同,說這兩個對象實際上是同一個類型對象。

+0

亞iam問爲什麼該序列版本的UID需要? – developer 2011-04-07 04:43:14

0

的的serialVersionUID用作Serializable類版本控制。如果您沒有明確聲明serialVersionUID,則JVM將根據您的Serializable類的各個方面自動爲您執行此操作,如Java(TM) Object Serialization Specification中所述。

2

爲什麼序列化需要 串行版本的UID實現了 類?

它根本不需要它。這是一個可選功能。

+0

可選的含義,它會在運行時自動生成,而序列化......它的簡單或者你明確地給它或編譯器將生成序列版本的UID。 – 2015-05-22 05:29:00

+0

@ Anandj.Kadhi No. * JVM *將生成它,特別是ObjectOutputStream和朋友。它仍然是可選的,它仍然不是由編譯器生成的。不要在這裏發佈錯誤信息。 – EJP 2017-01-05 09:43:38

+0

在規範中提到'但是,強烈建議所有可序列化的類顯式聲明serialVersionUID值,因爲默認的serialVersionUID計算對類詳細信息高度敏感,可能因編譯器實現而異,因此可能會導致意外的InvalidClassExceptions在反序列化過程中'意味着不同的編譯器實現會導致不同的serailVersionUID,因此我提到'編譯器'。請刷新您的信息 – 2017-01-06 06:28:11

相關問題