這兩天在測試一個Spring RMI接口的時候,出現了個奇怪的問題。Server端返回的數據,到了客戶端出現了屬性丟失的狀況。
類繼承體系 java
。客戶端裏面定義在ClassA中的屬性所有爲null。shell
RMI過程當中的數據有一個序列化和反序列化的過程,分析多是因爲序列化和反序列化的緣由致使數據丟失。數據庫
public static void main(String[] args) throws IOException, ClassNotFoundException { ClassB b = new ClassB(); b.setName("abc"); b.setId(1L); logger.info(b.toString()); FileOutputStream fs = new FileOutputStream("foo.ser"); ObjectOutputStream os = new ObjectOutputStream(fs); os.writeObject(b); ObjectInputStream is = new ObjectInputStream(new FileInputStream("foo.ser")); ClassB b2 = (ClassB) is.readObject(); logger.info(b2.toString()); }
反序列化的數據丟失了父類ClassA中的屬性。網絡
ClassA也實現 Serializable 接口。更新後的類圖:測試
16:24:37.769 [main] INFO ser.Main - ClassB{id='1'name='abc'} 16:24:37.879 [main] INFO ser.Main - ClassB{id='1'name='abc'}
序列化的使用場景:3d
序列化的範圍是 Serializable 接口的子類,不包含該子類的不包含。code