1. 程式人生 > >Java的序列化ID的作用

Java的序列化ID的作用

       簡單來說,Java的序列化機制是通過在執行時判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來的位元組流中的serialVersionUID與本地相應實體(類)的serialVersionUID進行比較,如果相同就認為是一致的,可以進行反序列化,否則就會出現序列化版本不一致的異常。

       當實現java.io.Serializable介面的實體(類)沒有顯式地定義一個名為serialVersionUID,型別為long的變數時,Java序列化機制會根據編譯的class自動生成一個serialVersionUID作序列化版本比較用,這種情況下,只有同一次編譯生成的class才會生成相同的serialVersionUID 。

       如果我們不希望通過編譯來強制劃分軟體版本,即實現序列化介面的實體能夠相容先前版本,未作更改的類,就需要顯式地定義一個名為serialVersionUID,型別為long的變數,不修改這個變數值的序列化實體都可以相互進行序列化和反序列化。

    假設兩年前我儲存了某個類的一個物件,這兩年來,我修改該類,刪除了某個屬性和增加了另外一個屬性,兩年後,我又去讀取那個儲存的物件,或有什麼結果?未知!sun的jdk就會蒙了。為此,一個解決辦法就是在類中增加版本後,每一次類的屬性修改,都應該把版本號升級一下,這樣,在讀取時,比較儲存物件時的版本號與當前類的版本號,如果不一致,則直接報版本號不同的錯!