Java.io.ObjectInputStream.resolveObject() 方法

描述

java.io.ObjectInputStream.resolveObject(Object obj) 方法将允许 ObjectInputStream 的受信任子类在反序列化期间用一个对象替换另一个对象。 在调用 enableResolveObject 之前,禁用替换对象。 enableResolveObject 方法检查请求解析对象的流是否可信。 每个对可序列化对象的引用都会传递给 resolveObject。 为了确保对象的私有状态不会无意暴露,只有受信任的流可以使用 resolveObject。

在读取对象之后但在从 readObject 返回之前调用此方法。 默认的 resolveObject 方法只返回相同的对象。

当子类替换对象时,它必须确保被替换的对象与将存储引用的每个字段兼容。 类型不是字段或数组元素类型的子类的对象通过引发异常中止序列化并且不存储该对象。


声明

以下是 java.io.ObjectInputStream.resolveObject() 方法的声明。

protected Object resolveObject(Object obj)

参数

obj − 被替换的对象。


返回值

此方法返回被替换的对象。


异常

IOException − 任何常见的输入/输出异常。


示例

下面的例子展示了 java.io.ObjectInputStream.resolveObject() 方法的使用。

package com.tutorialspoint;

import java.io.*;

public class ObjectInputStreamDemo extends ObjectInputStream {

   public ObjectInputStreamDemo(InputStream in) throws IOException {
      super(in);
   }

   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.writeUTF(s);
         oout.flush();

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

         // enable object resolving
         ois.enableResolveObject(true);

         // get the class for string and print the name
         System.out.println("" + ois.resolveObject(ois.readUTF()));
      } catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}

让我们编译并运行上面的程序,这将产生下面的结果 −

Hello World