小编Mr.*_*ite的帖子

Java的EOFException是特殊的吗?

使用异常来指示已到达文件的末尾似乎很脏.我们阅读的每个文件都有一个结尾,所以它似乎并不特殊或意外.此外,我不喜欢对我的程序的非异常流程使用异常.

我正在谈论使用java.io.EOFException来表示数据输入流的结束:

想象一个包含以下消息的文件......

----------------- ------------------
- 2-byte LENGTH - - N-byte PAYLOAD - , where N = LENGTH;
----------------- ------------------
Run Code Online (Sandbox Code Playgroud)

...并使用DataInputStream读取此文件:

DataInputStream in = new DataInputStream(...);

...

try {
    while (true) {
        short length = in.readShort();
        byte[] b = new byte[length];
        in.readFully(b);
    }
} catch (EOFException e) { }

...
Run Code Online (Sandbox Code Playgroud)

在此示例中,调用将抛出EOFException in.readShort().我应该弄清楚文件中的字节数,并准确读取该字节数(由total -= length零开始确定),并退出while循环而没有异常?我正在寻找最佳实践.

我应该这样做吗?

long total = file.length();
while (total > 0) {
    short length = in.readShort();
    total -= length;
    byte[] b = new …
Run Code Online (Sandbox Code Playgroud)

java io exception inputstream eofexception

5
推荐指数
1
解决办法
3968
查看次数

标签 统计

eofexception ×1

exception ×1

inputstream ×1

io ×1

java ×1