Я читаю в файле произвольного размера в блоках по 1021 байт, с размером блока <= 1021 байт для последнего блока файла. На данный момент я делаю это, используя <code>BufferedInputStream, который обернут вокруг FileInputStream
и код, который выглядит (примерно) следующим образом (где reader
- это BufferedInputStream
, и это работает в цикле):
int availableData = reader.available();
int datalen = (availableData >= 1021)
? 1021
: availableData;
reader.read(bufferArray, 0, datalen);
Однако, читая документы API, я отмечаю, что available()
дает только «оценку» доступного размера, прежде чем вызов будет «блокирован». Вывод значения availableData
каждая итерация дает ожидаемые значения - начиная с размера файла и постепенно уменьшая его до <= 1021. Учитывая, что это локальный файл, я ошибаюсь, ожидая, что это будет правильное значение - есть ли ситуация, когда <code>available() даст неправильный ответ?
РЕДАКТИРОВАТЬ: Извините, дополнительная информация. BufferedInputStream
обернут вокруг FileInputStream
. Исходя из исходного кода FIS, я думаю, что я могу с уверенностью полагаться на available () как меру того, сколько данных осталось в случае локального файла. Я прав?