1. 程式人生 > >java中序列化和反序列化

java中序列化和反序列化

參考:https://blog.csdn.net/qq_27093465/article/details/78544505

1.定義

序列化:將物件轉換成字元序列。

反序列化:將字元序列還原成物件。

2.到底什麼場景中才真的需要序列化

(1):當想把記憶體中的物件儲存到檔案或者資料庫中的時候。

(2):當想用套接字在網路上傳輸物件的時候。

(3):當想通過RMI傳輸物件的時候。

3.總結

當我們定義一個實體的時候,總是自然而然的實現序列化介面,生成序列化的id,但我們究竟什麼時候用到,如果不做以上操作在什麼場景下會丟擲異常呢?

(1):當我們想將物件寫到檔案中,或者儲存到資料庫中的時候,如果沒有對物件進行序列化操作,將會丟擲NotSerializableException異常。

(2):當我們實現了序列化介面,對物件進行了序列化,之後物件中又添加了新的屬性,這時反序列操作就會丟擲InvalidClassException異常,這是因為我們沒有生成序列化id,是系統為我們指定了序列化id,新增屬性之後,導致序列化id改變,反序列時,id不一致導致的。

(3):transient修飾的欄位和static欄位不會進行序列化,transient序列化之後欄位為null,static欄位可通過序列化之後,修改static的值來進行測試。如果static欄位參與序列化,那麼反序列之後的值會覆蓋我們修改的值。