ObjectInputStream readUnshared()方法

java.io.ObjectInputStream.readUnshared() 方法从ObjectInputStream中读取“非共享”对象。这种方法是与readObject相同,但它可以防止后续调用readObject和readUnshared从返回通过这个调用.指定得到的反序列化实例其他参考:

  • 如果readUnshared被称为反序列化一个反向引用(先前已经写入流对象的流表示),一个ObjectStreamException将被抛出

  • 如果readUnshared成功返回,那么任何后续尝试反序列化反向引用到流句柄由readUnshared反序列化将导致ObjectStreamException被抛出。

通过readUnshared反序列化一个对象,返回的对象关联的流句柄无效。请注意,这本身并不能保证通过readUnshared返回的引用是唯一的;反序列化的对象可以定义它返回一个对象可见的其他各方readResolve方法的方法,或readUnshared可能会返回一个Class对象或枚举常量索取其他地方流或通过外部手段。如果反序列化对象定义一个readResolve方法方法,并且该方法的调用返回一个数组,然后readUnshared返回数组的一个浅表副本;这保证了返回的数组对象是唯一的,不能从readObject或readUnshared上的ObjectInputStream的第二次调用获得,即使底层的数据流已经被操纵。

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

1 语法

public Object readUnshared()

2 参数

3 返回值

返回对反序列化对象的引用。

4 示例 

package com.yiidian;

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

public class Demo {
    public static void main(String[] args) {
        String s = "Hello World";

        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.flush();

            // create an ObjectInputStream for the file we created before
            ObjectInputStream ois = new ObjectInputStream(new FileInputStream("test.txt"));

            // read and print the unshared object
            System.out.println("" + ois.readUnshared());
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

输出结果为:

Hello World

热门文章

优秀文章