3

我正在尝试使用方法写入大于 256 的值DataOupPutStream.write()。当我尝试使用它读取相同的值DataInputStream.read()时,它将返回 0。因此,我使用DataOutputStream.writeInt()DataInputStream.readInt()方法来写入和检索大于 256 的值,它工作正常。

请参阅下面的代码片段,我想知道编译器在语句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 回答