這裏是一個非常基本的測試程序:反序列化的對象是否保留靜態值?
public class Body implements Serializable {
static int bod = 5;
int dis = -1;
public void show(){
System.out.println("Result: " + bod + " & " + dis);
}
}
public class Testing {
public static void main(String[] args) {
Body theBody = new Body();
theBody.show();
try {
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("test.dat"));
out.writeObject(theBody);
out.close();
ObjectInputStream in = new ObjectInputStream(new FileInputStream("test.dat"));
Body bodyDouble = (Body)in.readObject();
in.close();
bodyDouble.show();
} catch(IOException e) {
} catch(ClassNotFoundException e) {
}
}
}
但我不明白爲什麼它的輸出是:
Result: 5 & -1
Result: 5 & -1
由於靜態成員沒有序列號,因此得到默認值,我期待另一個輸出:
Result: 5 & -1
Result: 0 & -1
反序列化的對象是如何獲得正確的靜態字段值的?
我做了這個測試應用程序,因爲我需要序列化幾個對象與一些靜態字段,以便使深拷貝(當然,我需要確保副本具有相同的靜態字段的值因爲它們被用作數組索引)。
現在我對反序列化後會發生什麼感到絕望。一方面,靜態成員不會被序列化,但另一方面,正如示例所證明的,靜態成員以某種方式保存了它們的值。我懷疑這與將readObject()
轉換成Body
對象有關,但我不確定。
http://stackoverflow.com/questions/1008023/how-to-serialize-static-data-members-of-a-java-class – rkosegi