Java.io.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。
聲明
以下是java.io.ObjectInputStream.readUnshared()方法的聲明
public Object readUnshared()
參數
-
NA
返回值
該方法返回一個引用對象的反序列化
異常
-
ClassNotFoundException --如果無法找到類的對象進行反序列化
-
StreamCorruptedException --如果在流中的控製信息不一致
-
ObjectStreamException -- 如果對象進行反序列化已經出現在流中
-
OptionalDataException -- 如果原始數據是下一個在流中
-
IOException -- 如果反序列化期間發生I/ O錯誤
例子
下麵的示例演示java.io.ObjectInputStream.readUnshared()方法的用法。
package com.yiibai; 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