描述
这个java.io.ObjectInputStream.readUnshared()方法从 ObjectInputStream 读取 "unshared" 对象。此方法与 readObject 相同,不同之处在于它阻止对 readObject 和 readUnshared 的后续调用返回对通过此调用获得的反序列化实例的额外引用。特别是 -
如果调用 readUnshared 来反序列化 back-reference(先前已写入流的对象的流表示),则会抛出 ObjectStreamException
如果 readUnshared 成功返回,则任何后续将 back-references 反序列化为 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
相关用法
- Java Java.io.ObjectInputStream.readUTF()用法及代码示例
- Java Java.io.ObjectInputStream.readObject()用法及代码示例
- Java Java.io.ObjectInputStream.readInt()用法及代码示例
- Java Java.io.ObjectInputStream.readFloat()用法及代码示例
- Java Java.io.ObjectInputStream.readChar()用法及代码示例
- Java Java.io.ObjectInputStream.readBoolean()用法及代码示例
- Java Java.io.ObjectInputStream.read()用法及代码示例
- Java Java.io.ObjectInputStream.readLong()用法及代码示例
- Java Java.io.ObjectInputStream.readDouble()用法及代码示例
- Java Java.io.ObjectInputStream.readFields()用法及代码示例
- Java Java.io.ObjectInputStream.readShort()用法及代码示例
- Java Java.io.ObjectInputStream.readFully()用法及代码示例
- Java Java.io.ObjectInputStream.readByte()用法及代码示例
- Java Java.io.ObjectInputStream.resolveClass()用法及代码示例
- Java Java.io.ObjectInputStream.resolveObject()用法及代码示例
- Java Java.io.ObjectInputStream.getField.get()用法及代码示例
- Java Java.io.ObjectInputStream.skipBytes()用法及代码示例
- Java Java.io.ObjectInputStream.available()用法及代码示例
- Java Java.io.ObjectInputStream.close()用法及代码示例
- Java Java.io.ObjectOutputStream.writeObject()用法及代码示例
注:本文由纯净天空筛选整理自 Java.io.ObjectInputStream.readUnshared() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。