serialVersionUID做用:
序列化時爲了保持版本的兼容性,即在版本升級時反序列化仍保持對象的惟一性。
有兩種生成方式:
一個是默認的1L,好比:private static final long serialVersionUID = 1L;
一個是根據類名、接口名、成員方法及屬性等來生成一個64位的哈希字段,好比:
private static final long serialVersionUID = xxxxL;對象
一、沒有顯示指定序列號
對象序列化時,若是沒有指定序列號,JVM會爲咱們自動產生一個值,但這個值和編譯器的實現相關,以後你的類Serialized存到硬盤上面後,但是後來你卻更改了類別的field(增長或減小或更名),當你Deserialize時,編譯器會根據類最新的結構生成一個序列號,跟序列化前的序列號比較,不相同就會出現InvalidClassException的,這樣就會形成不兼容性的問題。 接口
二、顯示指定序列號
顯示指定了序列號,改變類field,當你Deserialize時它就會將不同的field以type的預設值Deserialize編譯器