Java.io.ObjectOutputStream.writeUnshared() 方法
描述
java.io.ObjectOutputStream.writeUnshared(Object obj) 方法将"未共享"对象写入 ObjectOutputStream。 此方法与 writeObject 相同,不同之处在于它始终将给定对象作为流中新的唯一对象写入(与指向先前序列化实例的反向引用相反)。具体而言 −
通过 writeUnshared 写入的对象始终以与新出现的对象(尚未写入流的对象)相同的方式序列化,无论该对象之前是否已写入。
如果 writeObject 用于写入之前已使用 writeUnshared 写入的对象,则之前的 writeUnshared 操作将被视为单独对象的写入。 换句话说,ObjectOutputStream 永远不会生成对通过调用 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.tutorialspoint;
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

