1. 程式人生 > >分散式系統的基石--序列化以及反序列化

分散式系統的基石--序列化以及反序列化

1.序列化的意義

序列化:就是把物件變為可儲存或者可傳輸的形式過程---》把物件轉化為位元組序列

反序列化:就是序列化的逆向過程,把位元組序列恢復為物件

2.序列化面臨的挑戰

序列化的倆個重要指標:1.序列化以後資料的大小 2.序列化操作對本身作業系統的開銷

java語言本身對序列化提供了支援,也是java語言本身最重要的底層機制之一,java本身提供了序列化機制存在倆個問題

1.序列化之後的資料比較大,傳輸效率比較低 2.其它語言無法識別和對接

具體實現:

1)自定義一個介面,裡面有序列化以及反序列化方法

2)實現類 序列化以及反序列化 

3.序列化的高階認識

1)serialVersionUID 的作用

Java的序列化機制是通過判斷類的serialVersionUID來驗證版本一致性的,在進行反序列化的時候,jvm會把位元組流中的serialVersionUID與本地實體類中的serialVersionUID進行比較,如果相同就認為是一致的,就進行反序列化,否則就會出現序列化版本不一致的異常,即 是 InvalidCastException!

如果沒有為指定的類配置serialVersionUID,java編譯器會自動給這個class進行一個摘要演算法,類似於指紋演算法,只要這個檔案有任何改動,這個serialVersionUID就會截然不同,可以保證在這麼多類中,這個編號是唯一的,除非類名方法名發生變化,才會發生變化,否則(就算註釋再怎麼變化),serialVersionUID也不會發生變化。

2)靜態變數序列化

 3).父類的序列化

如果一個子類繼承了父類,子類本身實現了序列化,而父類沒有實現序列化,那麼進行反序列化的時候,父類中的屬性為 null

4).Transient 關鍵字

Transient 關鍵字的作用是控制變數的序列化,在變數宣告前加上該關 鍵字,可以阻止該變數被序列化到檔案中,在被反序列化後,transient 變數的值被設為初始值,如 int 型的是 0,物件型的是 null

繞開 transient 機制的辦法(一般不經常使用)

5)序列化實現深克隆

11)淺克隆:

22)序列化實現深克隆