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

Java.io.ObjectOutputStream.writeUnshared()方法實例

java.io.ObjectOutputStream.writeUnshared(Object obj) 方法寫一個“非共享”對象到對象輸出流。這種方法與writeObject相同,不同之處在於它總是在給定對象寫入的數據流在一個新的,獨特的對象(而不是一個向後引用指向一個先前序列化實例)具體而言:

  • 通過writeUnshared寫入一個對象始終序列中相同的方式作為一個新出現的對象(即還冇有被寫入到該流又一個目的),而不管是否該對象已經被預先寫入。

  • 如果writeObject是用來寫之前已經寫入writeUnshared對象,之前的writeUnshared操作被視為好像它是一個單獨的對象的寫操作。換句話說,對象輸出決不會產生反向引用對象是由調用writeUnshared數據。

同時通過writeUnshared寫入對象本身並不保證唯一引用時,反序列化的對象,它允許在流中多次定義一個對象,以便多個調用由接收器不會衝突readUnshared。請注意,上述規則僅適用於寫入writeUnshared基礎級彆的對象,而不是被序列化的傳遞地引用對象圖中的子對象。

ObjectOutputStream子類的重寫此方法隻能在安全上下文擁有“enableSubclassImplementation”的SerializablePermission構造;任何試圖實例化這樣一個子類冇有此權限將導致拋出SecurityException。

聲明

以下是java.io.ObjectOutputStream.writeUnshared()方法的聲明

public void writeUnshared(Object obj)

參數

  • obj -- 要寫入流的對象

返回值

此方法無返回值。

異常

  • NotSerializableException -- 如果圖中的對象進行序列化並冇有實現Serializable接口

  • InvalidClassException -- 如果與一個對象的類被序列化時存在的問題

  • IOException -- 如果序列化過程中發生I/ O錯誤

例子

下麵的示例演示java.io.ObjectOutputStream.writeUnshared()方法的用法。

package com.yiibai;

import java.io.*;

public class ObjectOutputStreamDemo {

   public static void main(String[] args) {

      Object s = "Hello World!";
      Object i = 1974;
      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.writeUnshared(i);

         // close the stream
         oout.close();

         // create an ObjectInputStream for the file we created before
         ObjectInputStream ois =
                 new ObjectInputStream(new FileInputStream("test.txt"));

         // read and print what we wrote before
         System.out.println("" + ois.readUnshared());
         System.out.println("" + ois.readUnshared());


      } catch (Exception ex) {
         ex.printStackTrace();
      }

   }
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Hello World!
1974