1. 程式人生 > >實體類為啥要序列化

實體類為啥要序列化

        我的理解:就像我們搬桌子,桌子太大了不能通過比較小的門,所以我們要把它拆了再運進去,這個拆桌子的過程就是序列化。

而反序列化就是等我們需要用桌子的時候再把它竇起來,這個過程就是反序列化。

        我們知道,當兩個程序進行遠端通訊時,可以相互發送各種型別的資料,包括文字、圖片、音訊、視訊等, 而這些資料都會以二進位制序列的形式在網路上傳送。那麼當兩個Java程序進行通訊時,能否實現程序間的物件傳送呢?答案是可以的。如何做到呢?這就需要Java序列化與反序列化了。換句話說,一方面,傳送方需要把這個Java物件轉換為位元組序列,然後在網路上傳送;另一方面,接收方需要從位元組序列中恢復出Java物件。

           當我們明晰了為什麼需要Java序列化和反序列化後,我們很自然地會想Java序列化的好處。其好處一是實現了資料的持久化,通過序列化可以把資料永久地儲存到硬碟上(通常存放在檔案裡),二是,利用序列化實現遠端通訊,即在網路上傳送物件的位元組序列。

-------------------------------------------------------------------------------------------------------------

        序列化是一種用來處理物件流的機制 ,所謂物件流就是將物件的內容進行流化。可以對流化後的物件進行讀寫操作,也可將流化後的物件傳輸於網路之間。
序列化是為了解決在對物件流進行讀寫操作時所引發的問題。

序列化的實現:將需要被序列化的類實現Serializable介面,該介面沒有需要實現的方法,implements Serializable只是為了標註該物件是可被序列化的,然後使用一個輸出流(如:FileOutputStream)來構造一個ObjectOutputStream(物件流)物件,接著,使用ObjectOutputStream物件的writeObject(Object obj)方法就可以將引數為obj的物件寫出(即儲存其狀態),要恢復的話則用輸入流;

------------------------------------------------------------------------------------------------------------

什麼時候使用序列化:

一:物件序列化可以實現分散式物件。主要應用例如:RMI要利用物件序列化執行遠端主機上的服務,
就像在本地機上執行物件時一樣。

二:java物件序列化不僅保留一個物件的資料,而且遞迴儲存物件引用的每個物件的資料。
可以將整個物件層次寫入位元組流中,可以儲存在檔案中或在網路連線上傳遞。利用物件序列化可以進行物件的"深複製",
即複製物件本身及引用的物件本身。序列化一個物件可能得到整個物件序列。