-1
我做了一個程序,故意引入了一個bug,使FileInputStream
對象讀過EOF字符。但是,這似乎並沒有讓它產生任何例外。`FileInputStream`超過EOF - 爲什麼會產生怪異行爲而不是拋出異常?
- 此對象不知道它是否已經超過文件的EOF符號 ?
- 爲什麼
System.out.print()
在EOF符號到達後在我的終端控制檯中停止打印?鑑於... FileOutputStream
繼續無限期地打印出奇怪的符號到outagain.txt
文件?這個奇怪的符號是什麼?在我提交這個問題時,我設法生成了一個佔用50MB硬盤空間的文本文件。
這裏是文本文件xanadu.txt
和產生怪異行爲的程序。
In Xanadu did Kubla Khan
A stately pleasure-dome decree:
Where Alph, the sacred river, ran
Through caverns measureless to man
Down to a sunless sea.
import java.io.*;
public class CopyBytes {
public static void main(String[] args) throws IOException {
FileInputStream in = null;
FileOutputStream out = null;
try {
in = new FileInputStream("xanadu.txt");
out = new FileOutputStream("outagain.txt");
while (true) {
int ch = in.read();
out.write(ch);
System.out.print((char)ch);
}
}
finally {
if (in != null)
in.close();
if (out != null)
out.close();
}
}
}
什麼'FileInputStream#read'呢? –
_爲什麼System.out.print()在到達EOF符號後停止在終端控制檯中打印?_不。它會不斷打印與整數值「-1」相關聯的字符,這在您的終端上可能不可見。 –
沒有'EOF字符'。有一個你忽略的EOF *返回值*。所以你再次得到它。然後再次。然後再次。在這裏你不是'過去'的任何東西,你只是陷入了一個無限循環。你應該拋出一個'EOFException'的期望是毫無根據的。 – EJP