1. 程式人生 > >java序列化一定要應該注意的6個事項!

java序列化一定要應該注意的6個事項!

1、如果子類實現Serializable介面而父類未實現時,父類不會被序列化,但此時父類必須有個無參構造方法,否則會拋InvalidClassException異常。

2、靜態變數不會被序列化,那是類的“菜”,不是物件的。

3、transient關鍵字修飾變數可以限制序列化。

4、虛擬機器是否允許反序列化,不僅取決於類路徑和功能程式碼是否一致,一個非常重要的一點是兩個類的序列化 ID 是否一致,就是 private static final long serialVersionUID = 1L。

5、Java 序列化機制為了節省磁碟空間,具有特定的儲存規則,當寫入檔案的為同一物件時,並不會再將物件的內容進行儲存,而只是再次儲存一份引用。反序列化時,恢復引用關係。

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