Действительно ли EOFException Java является исключительным?

Это кажется грязным для использования исключения, чтобы указать, что конец файла был достигнут. Каждый файл, который мы читаем, имеет конец, таким образом, это не кажется исключительным или неожиданным. Кроме того, мне не нравится использовать исключение для неисключительного потока моей программы.

Я говорю об использовании 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 попытка обнулить), и выходят из цикла с условием продолжения без исключения? Я - вид поиска лучшей практики.

Я должен сделать что-то вроде этого?

long total = file.length();
while (total > 0) {
    short length = in.readShort();
    total -= length;
    byte[] b = new byte[length];
    in.readFully(b);
}

Спецификация API указывает, что EOFException сигнализирует о конце файла, или конец потока был неожиданно достигнут во время входа. Но это также используется потоками ввода данных для передачи сигналов о конце потока.

Что я делаю, когда исключенный ожидается?

5
задан Mr. White 27 July 2010 в 16:18
поделиться