序列化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