使用异常来指示已到达文件末尾似乎很脏。我们读取的每个文件都有一个结尾,因此它看起来并不异常或意外。此外,我不喜欢对我的程序的非异常流程使用异常。
我说的是使用java.io.EOFException来表示数据输入流的结束:
想象一个包含以下消息的文件......
----------------- ------------------
- 2-byte LENGTH - - N-byte PAYLOAD - , where N = LENGTH;
----------------- ------------------
...并使用 DataInputStream 读取此文件:
DataInputStream in = new DataInputStream(...);
...
try {
while (true) {
short length = in.readShort();
byte[] b = new byte[length];
in.readFully(b);
}
} catch (EOFException e) { }
...
在此示例中,调用in.readShort()
. 我是否应该计算出文件中的字节数,并准确读取该字节数(由total -= length
归零确定),然后无一例外地退出 while 循环?我正在寻找最佳实践。
我应该做这样的事情吗?
long total = file.length();
while (total > 0) {
short length = in.readShort();
total -= length;
byte[] b = new byte[length];
in.readFully(b);
}
API 规范指定 EOFException 表示输入期间意外到达文件结尾或流结尾。但它也被数据输入流用来表示流结束。
当出现例外情况时我该怎么办?