2009-12-18 27 views
1

請幫忙澄清疑問:系列化和VERSIONID

雖然做串行化,如果我們定義的版本號爲

static final long serialVersionUID = 2L;,而且由於這是靜態不應該得到序列化,同時存儲對象的持久性媒體。

從持久介質讀回對象時,由於de序列化對象不應該包含該對象,因此該對象如何與versionID匹配。

回答

7

序列化運行時會自動將類serialVersionUID添加到對象流,它不會像「普通」實例字段那樣處理。這一切都發生在封面之下。

1

serialVersionUID是「靜態字段未被序列化」的規則的例外。 ObjectOutputStream每次將serialVersionUID的值寫入輸出流。 ObjectInputStream將其讀回,並且如果從流中讀取的值與當前版本的類中的serialVersionUID值不一致,則會引發InvalidClassException。此外,如果在類中沒有正式聲明的serialVersionUID被序列化,編譯器會自動添加一個基於類中聲明的字段的值。

參見: http://java.sun.com/j2se/1.5.0/docs/api/java/io/Serializable.html