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