Изменение позиционирования индекса в InputStream

У меня есть двоичный файл, который содержит ключи, и после каждого ключа есть связанное с ним изображение. Я хочу спрыгнуть с разных ключей, но не смог найти какой-либо метод, который изменяет позиционирование индекса во входном потоке. Я видел метод mark() но он не прыгает в разных местах.

Кто-нибудь знает, как это сделать?

Существует long skip(long n) метод long skip(long n) который вы можете использовать:

Пропускает и удаляет n байтов данных из этого входного потока. Метод skip может по разным причинам заканчиваться пропусканием некоторого меньшего количества байтов, возможно, 0 . Это может быть результатом любого из нескольких условий; Конечный конец файла перед пропуском n байтов – это только одна возможность. Возвращается фактическое количество пропущенных байтов. Если n отрицательно, байты не пропускаются.

Как указано в документе, вам не гарантируется, что n байтов будет пропущено, поэтому дважды установите возвращаемое значение. Обратите внимание, что это не позволяет вам «пропустить назад», но если это markSupported() , вы можете сначала reset() а затем skip в более раннюю позицию, если нужно.


Другие варианты

Вы также можете использовать java.io.RandomAccessFile , который, как следует из названия, разрешает произвольный доступ с seek(long pos) метода seek(long pos) .

Вы упомянули изображения, поэтому, если вы используете Java Advanced Imaging , другой возможный вариант – com.sun.media.jai.codec.FileSeekableStream , который является SeekableStream который берет свой вход из File или RandomAccessFile . Обратите внимание, что этот класс не является частью JAI API. Он может быть удален или изменен в будущих выпусках JAI.