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!