import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
public class Main {
/**
*ObjectInputStream 使用示例
*/
public void readPersons(String filename) {
ObjectInputStream inputStream = null;
try {
//構造ObjectInputStream對象
inputStream = new ObjectInputStream(new FileInputStream(filename));
Object obj = null;
while ((obj = inputStream.readObject()) != null) {
if (obj instanceof Person) {
System.out.println(((Person)obj).toString());
}
}
} catch (EOFException ex) { //在讀取到文件結束時觸發此異常
System.out.println("End of file reached.");
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
} catch (FileNotFoundException ex) {
ex.printStackTrace();
} catch (IOException ex) {
ex.printStackTrace();
} finally {
//Close the ObjectInputStream
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
new Main().readPersons("myFile.txt");
}
}
readObject方法:
public final Object readObject() throws IOException,ClassNotFoundException
從 ObjectInputStream 讀取對象。對象的類、類的簽名和類及所有其超類型的非瞬態和非靜態字段的值都將被讀取。可以使用 writeObject 和 readObject 方法為類重寫默認的反序列化。由此對象引用的對象是可傳遞讀取的,這樣 readObject 即可重新構造這些對象的完全等價的圖形。
通過完全還原根對象的所有字段及其引用的對象來完全還原根對象。此時,對象驗證回調的執行順序基於其注冊優先級。回調在其個別還原時由對象(按照 readObject 特定方法)進行注冊。 當 InputStream 中出現問題或者遇到不應反序列化的類時,將拋出異常。所有異常對於 InputStream 而言都是致命的,將使其處於不確定狀態;這將持續到調用方忽略或恢復流狀態。
指定者:
接口 ObjectInput 中的 readObject
返回:
從流讀取的對象
拋出:
ClassNotFoundException - 找不到序列化對象的類。
InvalidClassException - 序列化使用的類出了問題。
StreamCorruptedException - 流中的控制信息不一致。
OptionalDataException - 在流中而不是對象中找到了基本數據。
IOException - 任何常規的輸入/輸出相關的異常。這是readObject的全部描述,讀不到正確的Object信息就報錯 不會返回null來提示你
參考:http://www.debugease.com/j2ee/171334.html
