(轉)java 序列化ID的作用


序列化ID的作用:

 其實,這個序列化ID起着關鍵的作用,它決定着是否能夠成功反序列化!簡單來說,java的序列化機制是通過在運行時判斷類的serialVersionUID來驗證版本一致性的。在進行反序列化時,JVM會把傳來的字節流中的serialVersionUID與本地實體類中的serialVersionUID進行比較,如果相同則認為是一致的,便可以進行反序列化,否則就會報序列化版本不一致的異常。

序列化ID如何產生:

       當我們一個實體類中沒有顯示的定義一個名為“serialVersionUID”、類型為long的變量時,Java序列化機制會根據編譯時的class自動生成一個serialVersionUID作為序列化版本比較,這種情況下,只有同一次編譯生成的class才會生成相同的serialVersionUID。譬如,當我們編寫一個類時,隨着時間的推移,我們因為需求改動,需要在本地類中添加其他的字段,這個時候再反序列化時便會出現serialVersionUID不一致,導致反序列化失敗。那么如何解決呢?便是在本地類中添加一個“serialVersionUID”變量,值保持不變,便可以進行序列化和反序列化。

使用:

public class Person implements Serializable  {
    //序列化ID
    private static final long serialVersionUID = -5809782578272943999L;
// ...
}

沒有序列化id時候,如果在類中增加字段,會產生異常

java.io.InvalidClassException

參考

java 序列化ID的作用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。