ファイルの終わりに到達したことを示すために例外を使用するのは汚いようです。私たちが読むすべてのファイルには終わりがあるので、例外的または予期しないものではないようです。さらに、プログラムの非例外的なフローに例外を使用するのは好きではありません。
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) { }
...
この例では、 への呼び出しによって EOFException がスローされ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 は、入力中に予期せずファイルの終わりまたはストリームの終わりに到達したことを通知することを指定しています。ただし、データ入力ストリームでもストリームの終わりを知らせるために使用されます。
例外が予想される場合はどうすればよいですか?