位置:首頁 > Java技術 > Java.io包 > Java.io.ObjectInputStream.readUnshared()方法實例

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