前幾天我問了一個關於從文件中讀取的問題,直到輸入完成。我收到了一些我曾經學習過的回覆,但是我有一個與該主題有關的問題:爲什麼我必須使用一些額外的測試,「finally」子句和另一個try-catch,而不僅僅是:爲什麼捕捉EOFException不足以知道輸入已完成?
DataInputStream reading = null;
try{
reading = new DataInputStream(new FileInputStream("tes.t"));
while(true)
{
System.out.println(reading.readInt());
System.out.println(reading.readDouble());
}
}catch(IOException xxx){System.err.println("Error: " + reading.getMessage());}
catch(EOFException xxx){reading.close();}
這是不夠的?我的意思是 - 只要我們到達EOF,我們就會有一個例外。否則,我們捕獲異常並打印錯誤消息。爲什麼我們需要額外的測試?這種方法有什麼問題?
編輯:好的,我現在明白爲什麼這是一件壞事。但如果我做這樣的代碼怎麼辦:
DataInputStream reading = null;
try{
reading = new DataInputStream(new FileInputStream("tes.t"));
while(reading.available()!=0)
{
System.out.println(reading.readInt());
System.out.println(reading.readDouble());
}
}catch(EOFException xxx){}
catch(IOException xxx){System.err.println("Error: " + reading.getMessage());}
正在檢查reading.available()的值更好的測試輸入結束還是一樣糟糕?
由於IOException在異常heirarchy中的EOFException的頂部,您的閱讀將永遠不會關閉。它實際上應該給你一些編譯錯誤。 – Jimmy
哦,沒錯。我的不好,代碼被添加到帖子編輯器中,沒有編譯或測試 - 謝謝:) – Straightfw
你想等一段時間,然後再檢查接受的答案。你會得到更多的眼睛和時間讓別人考慮你的問題。即使認爲你可能會在早期找到一個充分的,甚至是好的答案,作爲資源的網站將受益於額外的答案。 –