входные данные Java - PullRequest
       9

входные данные Java

2 голосов
/ 23 сентября 2011

Какой метод InputStream available() должен возвращаться при достижении конца потока?

В документации не указано поведение.

Ответы [ 5 ]

2 голосов
/ 23 сентября 2011

.. достигнут конец потока

Не используйте available() для определения конца потока! Вместо этого посмотрите на int, возвращаемое InputStream.read(), которое:

Если байт недоступен из-за достижения конца потока, возвращается значение -1. ​​

1 голос
/ 23 сентября 2011

JavaDoc сообщает об этом в разделе «Возвраты» -

an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking or 0 when it reaches the end of the input stream. 

(из InputStream JavaDoc )

1 голос
/ 23 сентября 2011

Теоретически, если достигнут конец потока, нет байтов для чтения и доступно возвращает 0. Но будьте осторожны с этим.Не все потоки обеспечивают реальную реализацию этого метода.Сам InputStream всегда возвращает 0.

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

0 голосов
/ 23 сентября 2011

Возвращает оценку количества байтов, которые могут быть прочитаны (или пропущены) из этого входного потока без блокировки при следующем вызове метода для этого входного потока. Следующим вызовом может быть тот же поток или другой поток. Одно чтение или пропуск этого количества байтов не будет блокировать, но может прочитать или пропустить меньшее количество байтов.

The available method for class InputStream always returns 0. 

http://download.oracle.com/javase/6/docs/api/java/io/InputStream.html#available%28%29

0 голосов
/ 23 сентября 2011

Из документации по Java 7 :
«оценка количества байтов, которые могут быть прочитаны (или пропущены) из этого входного потока без блокировки, или 0, когда он достигает конца входного потока.»

Итак, я бы сказал, что в этом случае должно возвращаться 0. Это также кажется мне наиболее интуитивным поведением.

...