序列化介面的id有什麼用

2021-08-04 05:35:46 字數 894 閱讀 5062

序列化serializable的方式特別簡單 實現serializable介面,再在類中宣告如下這乙個屬性即可。

private static final long serialversionuid = -3928832861296252415l;

serializable序列化的工作機制:

序列化的時候系統會把當前類的serialversionuid 寫入序列化的檔案中(也可能是其他中介),當

反序列化的時候系統會去檢測檔案中的serialversionuid

,看它是否和當前類的serialversionuid 一致,如果一致就說明序列化的類的版本和當前類的版本是相同的,這個時候可以成功反序列化,否則就說明當前類

和序列化的類相比發生了某些變換,比如成員變數的數量,型別可能發生了改變,這個時候就會拋異常,反序列化失敗。

serialversionuid作用: 

序列化時為了保持版本的相容性,即在版本公升級時反序列化仍保持物件的唯一性。 

那麼serialversionuid 是如何生成,生成規則是怎麼樣的呢?

預設情況下,也就是不宣告serialversionuid 屬性情況下,系統會按當前類的成員變數計算hash值並賦值給serialversionuid 。

所以,結論就出來了。宣告serialversionuid ,可以很大程度上避免反序列化過程的失敗。比如當版本公升級後,我們可能刪除了某個成員變數,

也可能增加了一些新的成員變數,這個時候我們的反序列化依然能夠成功,程式依然能夠最大程度地恢復資料,相反,如果不指定serialversionuid ,

程式就會掛掉。

如果類結構發生了非常規性改變,比如修改了類名,型別等,這個時候儘管serialversionuid 驗證通過了,但是反序列化過程

還是會失敗,因為類結構有了毀滅性的改變。

序列化介面的id有什麼用

序列化serializable的方式特別簡單 實現serializable介面,再在類中宣告如下這乙個屬性即可。private static final long serialversionuid 3928832861296252415l serializable序列化的工作機制 序列化的時候系統會...

介面到底有什麼用

我們定義乙個介面 public inte ce ibark 再定義乙個類,繼承於ibark,並且必需實現其中的bark 方法 public class dog ibark public void bark 然後,宣告dog的乙個例項,並呼叫bark 方法 dog 旺財 new dog 旺財.bark...

java 序列化有什麼作用

用於物件的持久化,將物件寫到硬碟中,需要用的時候再反序列化取出來。所謂序列化其實就是將程式中的資料 物件 通過某種方式,儲存到本地中。然後可以在程式關閉之後還儲存程式的某個執行狀態,方便在程式下次 執行的時候通過 反序列化 讀取出來,並且能夠還原資料的型別,從而延續程式退出時的狀態。一般來說,我們會...