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 がテキストにスローされるのはなぜですか?
解決:
それは1行を追加することでした:
while (!done) {
System.out.print((char) in.readByte());
System.out.flush(); // this one
}