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

Java.io.ObjectInputStream.readObject()方法實例

java.io.ObjectInputStream.readObject()方法從ObjectInputStream中讀取對象。讀取該對象的類,類簽名以及類及其所有超類型的非瞬態和非靜態字段的值。默認的反序列化的類可以使用writeObject和readObject方法被重寫。由此對象引用的對象被傳遞地讀,這樣對象的完全等價的圖形是由readObject重建。

當所有的字段和對象是引用完全恢複根對象完全恢複。此時對象驗證回調是為了根據其注冊優先執行。回調是由對象(在特殊的readObject方法)注冊,因為它們是單獨還原。

異常被拋出的問題與InputStream和對不應該反序列化的類。所有的異常都是致命的InputStream和讓它處於不確定狀態;是由調用者忽略或恢複流的狀態。

聲明

以下是java.io.ObjectInputStream.readObject()方法的聲明

public final Object readObject()

參數

  • NA

返回值

這個方法從流中讀取並返回該對象

異常

  • ClassNotFoundException -- 無法找到一個序列化對象的類。

  • InvalidClassException -- 使用一些錯誤的序列化的類。

  • StreamCorruptedException -- 流中的控製信息是不一致的。

  • OptionalDataException -- 原始數據,發現數據流,而不是對象。

  • IOException -- 任何常規的輸入/輸出相關的異常。

例子

下麵的示例演示java.io.ObjectInputStream.readObject()方法的用法。

package com.yiibai;

import java.io.*;

public class ObjectInputStreamDemo {

   public static void main(String[] args) {

      String s = "Hello World";
      byte[] b = {'e', 'x', 'a', 'm', 'p', 'l', 'e'};
      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.writeObject(s);
         oout.writeObject(b);
         oout.flush();

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

         // read and print an object and cast it as string
         System.out.println("" + (String) ois.readObject());

         // read and print an object and cast it as string
         byte[] read = (byte[]) ois.readObject();
         String s2 = new String(read);
         System.out.println("" + s2);


      } catch (Exception ex) {
         ex.printStackTrace();
      }

   }
}

讓我們編譯和運行上麵的程序,這將產生以下結果:

Hello World
example