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