serialVersionUID
是 Java 序列化協議中的一個關鍵概念,用于表示類的版本。當你在 Java 中實現 Serializable
接口時,可以選擇定義一個名為 serialVersionUID
的私有靜態最終變量。這個變量用于標識類的版本,以便在反序列化時確保發送方和接收方的類版本一致。
serialVersionUID
與 Java 序列化協議的版本關系如下:
如果兩個類的 serialVersionUID
相同,那么它們可以相互序列化和反序列化。這意味著,如果你在一個類中定義了 serialVersionUID
,并將其值設置為一個特定的數字,那么只有具有相同 serialVersionUID
值的類才能序列化和反序列化對象。
如果兩個類的 serialVersionUID
不同,那么它們不能相互序列化和反序列化。在這種情況下,當你嘗試反序列化一個對象時,會拋出 InvalidClassException
異常。
如果一個類沒有定義 serialVersionUID
,那么 Java 運行時會根據類的結構自動生成一個。這種情況下,如果類的結構發生變化(例如添加或刪除字段),那么生成的 serialVersionUID
也會發生變化,導致反序列化失敗。
為了確保類的向后兼容性,建議在實現 Serializable
接口時顯式定義 serialVersionUID
。這樣,即使類的結構發生變化,只要 serialVersionUID
保持不變,就可以繼續正常地序列化和反序列化對象。
總之,serialVersionUID
是 Java 序列化協議中的一個重要概念,用于確保類的版本一致性。通過顯式定義 serialVersionUID
,可以確保類的向后兼容性,避免因類結構變化而導致的反序列化失敗。