描述
這個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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。