java中序列化和反序列化
阿新 • • 發佈:2018-12-20
參考: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欄位參與序列化,那麼反序列之後的值會覆蓋我們修改的值。