我有一些简单的类是DataInputStream
从文件中读取的流。
我已经用EOFException
try-catch 块包围了这个流。
它有一些奇怪的行为,因为有时它会将 EOFException 抛出到读取的文本中。
输出到控制台:
"The vessel was in as good condition as I am, and as, I hope
you ar#End of streame#, M. Morrel, and this day and a half was lost from
pure whim, for the pleasure of going ashore, and nothing
else."
我无法弄清楚这种奇怪行为的原因是什么......
这是代码片段:
public class FormattedMemoryInput {
public static void main(String[] args) throws IOException {
boolean done = false;
try (DataInputStream in = new DataInputStream(new ByteArrayInputStream(
BufferedInputFile.read("./gutenberg/cristo.txt").getBytes()));) {
while (!done) {
System.out.print((char) in.readByte());
}
} catch (EOFException e) {
System.err.println("#End of stream#");
}
}
}
它使用静态方法BufferedInputFile.read()
读取前 500 行:
public class BufferedInputFile {
// Throw exceptions to console:
public static String read(String filename) throws IOException {
// Reading input by lines:
BufferedReader in = new BufferedReader(new FileReader(filename));
StringBuilder sb = new StringBuilder();
String s;
int i = 0;
while ((s = in.readLine()) != null && (i < 500)) {
sb.append(s + "\n");
i++;
}
in.close();
return sb.toString();
}
- 为什么EOFException被抛出到文本中?
解决方案:
它是在添加一行:
while (!done) {
System.out.print((char) in.readByte());
System.out.flush(); // this one
}