3

DataOupPutStream.write()メソッドを使用して256より大きい値を書き込もうとしています。それを使用して同じ値を読み取ろうとするとDataInputStream.read()、0が返されます。したがって、256を超える値を書き込んだり取得したりするためのメソッドを使用DataOutputStream.writeInt()しましたが、正常に機能しています。DataInputStream.readInt()

以下のコードスニペットを参照してください。ステートメントin.readInt()内でのコンパイラの動作を知りたいです。while

FileOutputStream fout = new FileOutputStream("T.txt");
BufferedOutputStream buffOut = new BufferedOutputStream(fout);
DataOutputStream out = new DataOutputStream(fout);

Integer output = 0;
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();

FileInputStream fin = new FileInputStream("T.txt");
DataInputStream in = new DataInputStream(fin);

while ((output = in.readInt()) > 0) {
    System.out.println(output);
}

このスニペットを実行したときの出力は次のとおりです。

Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at compress.DataIOStream.main(DataIOStream.java:34)
257
2
2123
223
2132

しかし、デバッグモードで実行すると、次の出力が得られます。

2123
223
2132
Exception in thread "main" java.io.EOFException
    at java.io.DataInputStream.readInt(Unknown Source)
    at compress.DataIOStream.main(DataIOStream.java:34)
4

1 に答える 1

8

readInt()メソッドは、他のメソッドと同じです。EOFExceptionが発生するのは、ファイルの最後に到達したときにreadInt()のJavadocが発生すると言っているためです。


私が走るとき

DataOutputStream out = new DataOutputStream(new FileOutputStream("T.txt"));
out.writeInt(257);
out.writeInt(2);
out.writeInt(2123);
out.writeInt(223);
out.writeInt(2132);
out.close();

DataInputStream in = new DataInputStream(new FileInputStream("T.txt"));
try {
    while (true) 
        System.out.println(in.readInt());
} catch (EOFException ignored) {
    System.out.println("[EOF]");
}
in.close();

これは通常モードとデバッグモードで取得します。

257
2
2123
223
2132
[EOF]
于 2011-05-26T08:31:19.113 に答える