ObjectOutputStream writeUnshared()方法

java.io.ObjectOutputStream.writeUnshared(Object obj) 此方法写入了“非共享”对象到对象输出流。

这种方法与writeObject相同,不同之处在于它总是在给定对象写入的数据流在一个新的,独特的对象(而不是一个向后引用指向一个先前序列化实例)具体而言:

  • 通过writeUnshared写入一个对象始终序列中相同的方式作为一个新出现的对象(即还没有被写入到该流又一个目的),而不管是否该对象已经被预先写入。

  • 如果writeObject是用来写之前已经写入writeUnshared对象,之前的writeUnshared操作被视为好像它是一个单独的对象的写操作。换句话说,对象输出决不会产生反向引用对象是由调用writeUnshared数据。

同时通过writeUnshared写入对象本身并不保证唯一引用时,反序列化的对象,它允许在流中多次定义一个对象,以便多个调用由接收器不会冲突readUnshared。请注意,上述规则仅适用于写入writeUnshared基础级别的对象,而不是被序列化的传递地引用对象图中的子对象。

ObjectOutputStream子类的重写此方法只能在安全上下文拥有“enableSubclassImplementation”的SerializablePermission构造;任何试图实例化这样一个子类没有此权限将导致抛出SecurityException。

1 语法

public void writeUnshared(Object obj)

2 参数

obj:写入流的对象。

3 返回值

4 示例 

package com.yiidian;

/**
 * 一点教程网: http://www.yiidian.com
 */
/**
 * java.io.ObjectOutputStream.writeUnshared(Object obj)方法的例子
 */
import java.io.*;

public class Demo {
    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

热门文章

优秀文章