Java序列化

一、若是子類實現Serializable接口而父類未實現時,父類不會被序列化,但此時父類必須有個無參構造方法,不然會拋InvalidClassException異常。對象

二、靜態變量不會被序列化,那是類的「菜」,不是對象的。接口

三、transient關鍵字修飾變量能夠限制序列化。虛擬機

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

五、Java 序列化機制爲了節省磁盤空間,具備特定的存儲規則,當寫入文件的爲同一對象時,並不會再將對象的內容進行存儲,而只是再次存儲一份引用。反序列化時,恢復引用關係。io

六、序列化到同一個文件時,如第二次修改了相同對象屬性值再次保存時候,虛擬機根據引用關係知道已經有一個相同對象已經寫入文件,所以只保存第二次寫的引用,因此讀取時,都是第一次保存的對象。讀者在使用一個文件屢次 writeObject 須要特別注意這個問題(基於第5點)。變量

相關文章
相關標籤/搜索