Object readUnshared protected void readStreamHeader int readUnsignedByte 描述 所述java.io.ObjectInputStream.readUnshared()方法从ObjectInputStream读取“非共享”对象。此方法与readObject相同,不同之处在于它阻止对readObject和readUnshared的后续调用返回对通过此调用获得的反序列化实例的其他引用。具体而言 - 如果调用readUnshared反序列化反向引用(先前已写入流的对象的流表示),则抛出ObjectStreamException 如果readUnshared成功返回,则后续尝试反序列化对readUnshared反序列化的流句柄的反向引用将导致抛出ObjectStreamException。 通过readUnshared反序列化对象会使与返回对象关联的流句柄无效。请注意,这本身并不总能保证readUnshared返回的引用是唯一的; 反序列化对象可以定义readResolve方法,该方法返回对其他方可见的对象,或者readUnshared可以返回可在流中的其他位置或通过外部方式获得的Class对象或枚举常量。如果反序列化对象定义了readResolve方法,并且该方法的调用返回一个数组,那么readUnshared将返回该数组的浅层克隆; 这保证了返回的数组对象是唯一的,并且无法在ObjectInputStream上调用readObject或readUnshared时再次获取,即使已经操作了基础数据流。 覆盖此方法的ObjectInputStream子类只能在拥有“enableSubclassImplementation”SerializablePermission的安全上下文中构造; 在没有此权限的情况下实例化此类子类的任何尝试都将导致抛出SecurityException。 声明 以下是java.io.ObjectInputStream.readUnshared()方法的声明。 public Object readUnshared() 参数 NA 返回值 此方法返回对反序列化对象的引用。 异常 ClassNotFoundException - 如果找不到要反序列化的对象的类。 StreamCorruptedException - 如果流中的控件信息不一致。 ObjectStreamException - 如果要反序列化的对象已经出现在流中。 OptionalDataException - 如果原始数据是下一个流。 IOException - 如果在反序列化期间发生I / O错误。 实例 以下示例显示了java.io.ObjectInputStream.readUnshared()方法的用法。 package com.tutorialspoint; 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 protected void readStreamHeader int readUnsignedByte