当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Java.io.ObjectInputStream.readUnshared()用法及代码示例



描述

这个java.io.ObjectInputStream.readUnshared()方法从 ObjectInputStream 读取 "unshared" 对象。此方法与 readObject 相同,不同之处在于它阻止对 readObject 和 readUnshared 的后续调用返回对通过此调用获得的反序列化实例的额外引用。特别是 -

  • 如果调用 readUnshared 来反序列化 back-reference(先前已写入流的对象的流表示),则会抛出 ObjectStreamException

  • 如果 readUnshared 成功返回,则任何后续将 back-references 反序列化为 readUnshared 反序列化的流句柄的尝试都将导致抛出 ObjectStreamException。

通过 readUnshared 反序列化对象会使与返回的对象关联的流句柄无效。请注意,这本身并不总是保证 readUnshared 返回的引用是唯一的;反序列化的对象可以定义一个 readResolve 方法,该方法返回一个对其他方可见的对象,或者 readUnshared 可以返回一个 Class 对象或枚举常量,可在流的其他地方或通过外部方式获得。如果反序列化对象定义了一个 readResolve 方法并且该方法的调用返回一个数组,则 readUnshared 返回该数组的浅克隆;这保证了返回的数组对象是唯一的,并且不能通过对 ObjectInputStream 的 readObject 或 readUnshared 的调用再次获得,即使底层数据流已被操作。

覆盖此方法的 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.tutorialspoint;

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

相关用法


注:本文由纯净天空筛选整理自 Java.io.ObjectInputStream.readUnshared() Method。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。