位置:首頁 > Java技術 > Java.io包 > Java.io.ObjectInputStream.resolveObject()方法實例

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.yiibai;

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