Java序列化與反序列化

Java序列化(建立可複用的Java對象)java

保持(持久化)對象及其狀態到內存或磁盤數組

  Java平臺容許咱們在內存中建立可複用的Java對象,但通常狀況下,只有當JVM處於運行時,這些對象纔可能存在,即這些對象的生命週期不會比JVM的生命週期更長。但在現實應用中,就可能要求在JVM中止運行以後可以保存(持久化)指定的對象,並在未來從新讀取被保存的對象。Java對象序列化就可以幫助咱們實現該功能。安全

序列化對象以字節數組保持--靜態成員不保存服務器

  使用Java對象序列化,在保存對象時,會把其狀態保存爲一組字節,在將來,再將這些字節組裝成對象。必須注意的是,對象序列化保存的是對象的「狀態」,即它的成員變量。由此可知,對象序列化不會關注類中的靜態變量。網絡

序列化用戶遠程對象傳輸加密

  除了在持久化對象時會用到對象序列化以外,當使用RMI(遠程方法調用),或在網絡中傳遞對象時,都會用到對象序列化。Java序列化API爲處理對象序列化提供了一個標準機制,該API簡單易用。spa

Serializable實現序列化對象

  在Java中,只要一個類實現了java.io.Serializable接口,那麼它就能夠被序列化。
接口

ObjectOutputStream和ObjectInputStream對對象進行序列化及反序列化生命週期

writeObject和readObject自定義序列化策略

  在類中增長writeIbject和readObject方法能夠實現自定義序列化策略。

序列化ID

  虛擬機是否容許反序列化,不只取決於類路徑和功能代碼是否一致,一個很是重要的一點是兩個類的序列化ID是否一致(就是private static final long serialVersionUID)。

序列化不保存靜態變量

序列化子父類說明

  要想將父類對象也序列化,就須要讓父類也實現Serializable接口。

Transient關鍵字阻止該變量被序列化到文件中

  1.在變量聲明前加上Transient關鍵字,能夠阻止該變量被序列化到文件中,在被反序列化後,transient變量的值被設爲初始值,如int型的是0,對象型的是null。

  2.服務器端給客戶端發送序列化對象數據,對象中有一些數據是敏感的,好比密碼字符串等,但願對該密碼字段在序列化時,進行加密,而客戶端若是擁有解密的密鑰,只有在客戶端進行反序列化時,才能夠對密碼進行讀取,這樣能夠必定程度保證序列化對象的數據安全。

相關文章
相關標籤/搜索