我正在嘗試兩種不同類型實例的基本Java序列化。這是第一個Java類的類結構:當Java對象序列化時,什麼因素控制文件大小
class Ancestor {
int ai = 1;
String as = "abc";
}
class DescendentSer extends Ancestor implements java.io.Serializable{
int diser = 2;
String dsser = "xyz";
@Override
public String toString(){
return diser + " " + dsser + " " +ai+" "+as ;
}
}
我嘗試序列「DescendentSer」通過下面的代碼片段:
FileOutputStream fos = new FileOutputStream("C:\\CoreCod\\serial.dat");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(new DescendentSer());
oos.flush();
oos.close();
當序列完成「serial.dat」的大小文件恰好是117個字節。然後我嘗試序列另一個實例,其類結構如下:
class IndDescendentSer implements java.io.Serializable{
int diser = 2;
String dsser = "xyz";
@Override
public String toString(){
return diser + " " + dsser ;
}
}
的序列化代碼序列化「IndDescendentSer」是完全一樣上面(除了文件名到其中的對象實例會序列化和要序列化的實例已從之前改變)。但是,這次序列化文件的大小恰好是120個字節。
這次可能是這個時候,這個序列化文件中包含的字節多於舊的字節,特別是當「IndDescendentSer」的實例是Object類的直接後代時,而「DescendentSer」有它的超類型 - 「祖先「班。因此,預計「DescendentSer」將被更多的數據和元數據序列化。
太多了,請在此處列出。類名稱,繼承深度,字段數量,字段名稱,字段內容,...請參見[對象序列化流協議](https://docs.oracle.com/javase/7/docs/platform/serialization/spec/ protocol.html)。 – EJP 2015-02-25 04:53:45
@EJP在序列化過程中,我非常想知道「繼承深度」,當序列化子類型序列化時,能否詳細說明所有超類型的行爲(以線性方式),其中沒有一個是可序列化的。我試過這種情況,一切順利,我從來沒有做任何特殊方法的實現,即'private void writeObject(java.io.ObjectOutputStream out) throws IOException private void readObject(java.io.ObjectInputStream in) 拋出IOException,ClassNotFoundException;'請解釋,預先感謝。 – 2015-02-28 12:03:00