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