2015-10-22 4 views
0

Из документа, функция «доступной» методы:Есть ли способ в InputStream - хороший способ перебора файла?

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

Итак, как долго требуется, чтобы этот метод возвращал результат. Если у меня есть файл с 10000 словами, и я хочу, чтобы пройти через каждое слово, проверяя, как это:

while (steam.available() > 0) { 
    steam.read(); // suppose that this read a word 
} 

Таким образом, после каждого чтения первого слова, это метод будет идти в течение следующих 9999 слов? И, после второго слова, проверьте его следующие 9998 слов?

Из документа говорится, что метод «оценивает количество байтов», то как это делается?

ответ

2

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

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

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

На практике вам нужны все данные из потока, или вы останавливаетесь при достижении определенного значения. Но это отдельный вопрос о том, как быстро он перетекает туда, откуда он когда-либо исходил. Удерживайте его или нет - вы не будете знать и не заботиться. :)

Смежные вопросы