Java Java.io.ObjectInputStream.readUnshared() 方法
-
描述
java.io.ObjectInputStream.readUnshared()方法从ObjectInputStream读取“非共享”对象。此方法与readObject相同,除了它防止随后对readObject和readUnshared的调用返回对通过此调用获得的反序列化实例的附加引用。-
如果调用readUnshared来反序列化反向引用(先前已写入流的对象的流表示形式),则将抛出ObjectStreamException
-
如果readUnshared成功返回,则任何随后的尝试反序列化由readUnshared反序列化的流句柄的反向引用都将引发ObjectStreamException。
通过readUnshared反序列化对象会使与返回的对象关联的流句柄无效。请注意,这本身并不总是保证readUnshared返回的引用是唯一的。反序列化的对象可以定义一个readResolve方法,该方法返回对其他方可见的对象,或者readUnshared返回一个Class对象或枚举常量,该对象或枚举常量可以在流中的其他位置或通过外部方式获得。如果反序列化的对象定义了readResolve方法,并且对该方法的调用返回了一个数组,则readUnshared返回该数组的浅表副本;这保证了返回的数组对象是唯一的,即使在底层数据流已被操纵的情况下,也无法通过调用ObjectInputStream上的readObject或readUnshared再次获得返回的数组对象。只能在具有“ enableSubclassImplementation” SerializablePermission的安全上下文中构造重写此方法的ObjectInputStream子类;在没有此权限的情况下实例化此类子类的任何尝试都将导致引发SecurityException。 -
-
声明
以下是java.io.ObjectInputStream.readUnshared()方法的声明。public Object readUnshared()
-
参数
不适用 -
返回值
此方法返回对反序列化对象的引用。 -
异常
-
ClassNotFoundException如果找不到要反序列化的对象的类。
-
StreamCorruptedException如果流中的控制信息不一致。
-
ObjectStreamException如果要反序列化的对象已经出现在流中。
-
OptionalDataException如果原始数据是流中的下一个。
-
IOException如果在反序列化期间发生I / O错误。
-
-
例子
以下示例显示java.io.ObjectInputStream.readUnshared()方法的用法。package com.jc2182; import java.io.*; public class ObjectInputStreamDemo { 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