Java.io.ObjectOutputStream.replaceObject()方法實例
**java.io.ObjectOutputStream.replaceObject(Object obj)**方法允許ObjectOutputStream的受信任子類的序列化過程中一個對象替代另一個。替換對象被禁用,直到enableReplaceObject被調用。enableReplaceObject方法檢查流要求做置換是可以信任的。寫入序列化流中的每個對象的第一個匹配傳遞給replaceObject。該對象隨後引用由以replaceObject原調用返回的對象取代。爲了確保對象的私有狀態不是無意暴露,只有受信任的流使用replaceObject。
ObjectOutputStream.writeObject方法接受一個Object類型的參數(而不是鍵入序列化),以便在那裏不可序列化的對象是通過序列化所取代的情況。
當一個子類取代對象時,必須確保任何一個互補的替代必須在反序列化或者說取代對象與參考將被存儲的每個字段兼容的進行。對象,其類型不是字段或數組元素中止序列化的通過引發異常,對象不會被保存的類型的子類。
此方法只調用一次是在第一次遇到每個對象時。該對象的所有後續引用將被重定向到新對象。此方法應返回到被取代的對象或原始對象。null可以返回以被取代的對象,但可能會導致NullReferenceException異常在於包含對原始的對象,因爲這是它們期望的對象,而不是空的類。
聲明
以下是java.io.ObjectOutputStream.replaceObject()方法的聲明
protected Object replaceObject(Object obj)
參數
- obj -- 要被替換的對象
返回值
此方法返回替換指定一個替代對象
異常
- IOException -- 任何異常由底層的OutputStream拋出。
例子
下面的示例演示java.io.ObjectOutputStream.replaceObject()方法的用法。
package com.yiibai; import java.io.*; public class ObjectOutputStreamDemo extends ObjectOutputStream { public ObjectOutputStreamDemo(OutputStream out) throws IOException { super(out); } public static void main(String[] args) { Object s = "Hello World!"; Object s2 = "Bye World!"; try { // create a new file with an ObjectOutputStream FileOutputStream out = new FileOutputStream("test.txt"); ObjectOutputStreamDemo oout = new ObjectOutputStreamDemo(out); // write something in the file oout.writeObject(s); oout.flush(); // enable object replacing oout.enableReplaceObject(true); // replace object System.out.println("" + oout.replaceObject(s2)); // close the stream oout.close(); // create an ObjectInputStream for the file we created before ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.txt")); // read and print an int System.out.println("" + (String) ois.readObject()); } catch (Exception ex) { ex.printStackTrace(); } } }
讓我們編譯和運行上面的程序,這將產生以下結果:
Bye World! Hello World!