天天看點

序列化與反序列化淺析 [ 2 ]

序列化主要作用:

1.對象持久化

2.網絡傳輸中使用位元組流進行對象傳輸

3.程序之間對對象的傳遞

序列算法的大概流程:

1.将對象執行個體相關的類中繼資料進行輸出(中繼資料即解釋資料的資料,類的中繼資料用于描述類的相關的資訊)

2.遞歸輸出類超類描述到最頂層(即超類的中繼資料)

3.從最頂層的超類輸出對象執行個體的實際資料值(主要還是有可能某些實際數值存儲在超類的屬性中,而執行個體的類并沒有将這屬性顯性化)

4.從上至下遞歸輸出執行個體的資料

序列化有三種方法

序列化必須實作Serializable或Externalizable接口

1.實作了serializable接口但沒有定義readObject,writeObject方法

序列化會先檢測類中有沒有readObject和wirteObject的方法,如果沒有使用者自寫的則會調用預設的readObject,writeObject

2.實作了serializable接口,也定義了上述兩方法

調用類自有的兩類方法進行序列化和反序列化

注意點:

序列化針對的是對象的狀态,對于對象的方法和類的狀态并不儲存

對象的執行個體對象如果引用了其他對象,那個對象也會被序列化

不是所有的對象都可以序列化,具體原因需自行了解

static代表的是類的狀态,transient是臨時資料

序列号用于發送者驗證序列化對象相容的類是否被序列化接收者加載,主要用途用于序列化對應不同版本的類的控制

如一個對象成員對象時一個對象,則這個對象資料成員也會被儲存,這是序列化解決深拷貝的原因