Java.io.ObjectOutputStream.writeUnshared()方法实例
java.io.ObjectOutputStream.writeUnshared(Object obj) 方法写一个“非共享”对象到对象输出流。这种方法与writeObject相同,不同之处在于它总是在给定对象写入的数据流在一个新的,独特的对象(而不是一个向后引用指向一个先前序列化实例)具体而言:
-
通过writeUnshared写入一个对象始终序列中相同的方式作为一个新出现的对象(即还没有被写入到该流又一个目的),而不管是否该对象已经被预先写入。
-
如果writeObject是用来写之前已经写入writeUnshared对象,之前的writeUnshared操作被视为好像它是一个单独的对象的写操作。换句话说,对象输出决不会产生反向引用对象是由调用writeUnshared数据。
同时通过writeUnshared写入对象本身并不保证唯一引用时,反序列化的对象,它允许在流中多次定义一个对象,以便多个调用由接收器不会冲突readUnshared。请注意,上述规则仅适用于写入writeUnshared基础级别的对象,而不是被序列化的传递地引用对象图中的子对象。
ObjectOutputStream子类的重写此方法只能在安全上下文拥有“enableSubclassImplementation”的SerializablePermission构造;任何试图实例化这样一个子类没有此权限将导致抛出SecurityException。
声明
以下是java.io.ObjectOutputStream.writeUnshared()方法的声明
public void writeUnshared(Object obj)
参数
-
obj -- 要写入流的对象
返回值
此方法无返回值。
异常
-
NotSerializableException -- 如果图中的对象进行序列化并没有实现Serializable接口
-
InvalidClassException -- 如果与一个对象的类被序列化时存在的问题
-
IOException -- 如果序列化过程中发生I/ O错误
例子
下面的示例演示java.io.ObjectOutputStream.writeUnshared()方法的用法。
package com.yiibai; import java.io.*; public class ObjectOutputStreamDemo { public static void main(String[] args) { Object s = "Hello World!"; Object i = 1974; try { // create a new file with an ObjectOutputStream FileOutputStream out = new FileOutputStream("test.txt"); ObjectOutputStream oout = new ObjectOutputStream(out); // write something in the file oout.writeUnshared(s); oout.writeUnshared(i); // 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 what we wrote before System.out.println("" + ois.readUnshared()); System.out.println("" + ois.readUnshared()); } catch (Exception ex) { ex.printStackTrace(); } } }
让我们编译和运行上面的程序,这将产生以下结果:
Hello World! 1974