Для всех потоков характерно, что длина заранее не известна. При использовании стандартного InputStream
обычным решением является простой вызов read
, пока не будет возвращено -1
.
Но я предполагаю, что вы обернули стандартный InputStream
в DataInputStream
по уважительной причине: для анализа двоичных данных. (Примечание: Scanner
только для текстовых данных.)
JavaDoc для DataInputStream
показывает, что у этого класса есть два различных способа указать EOF - каждый метод либо возвращает -1
, либо выдает EOFException
. Практическое правило:
- Каждый метод, унаследованный от
InputStream
, использует соглашение "return -1
",
- Каждый метод НЕ , унаследованный от
InputStream
, создает EOFException
.
Если вы используете, например, readShort
, читайте до тех пор, пока не будет сгенерировано исключение, если вы используете "read ()", делайте это, пока не будет возвращено -1
.
Совет: будьте очень осторожными в начале и ищите каждый метод, который вы используете из DataInputStream
- правило может нарушиться.