Я обрабатываю двоичный поток и должен пропускать эффективно за пределы диапазона данных, которые мне не интересны, к некоторым данным, которые будут обработаны.
InputStream.skip(long)
не мешает гарантировать:
Пропускает и удаляет n байтов данных из этого входного потока. Метод пропуска может по разным причинам заканчиваться пропусканием некоторого меньшего количества байтов, возможно, 0. Это может быть результатом любого из нескольких условий; конечный конец файла перед пропуском n байтов - это только одна возможность. Возвращается фактическое количество пропущенных байтов.
Мне нужно знать, что произошло одно из двух:
- Поток закончился
- Пропущенные байты
Прост достаточно. Однако снисходительность, предоставляемая в этом описании, означает, что, например, BufferedInputStream
может просто пропустить несколько байтов и вернуться. Конечно, он говорит мне, что он пропустил только те немногие, но неясно, почему.
Итак, мой вопрос: можете ли вы использовать InputStream.skip(long)
так, как вы знаете, когда заканчивается поток или успешно завершается прогон?