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
java_io_objectinputstream.htm
廣告