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