位置:首页 > 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