Практически все алгоритмы сжатия, которые я знаю, работают в режиме блоков , что означает, что случайный поиск невозможен. Даже LZMA, который не использует исходный словарь, требует последовательной распаковки.
Сжатие потока означает обычно адаптивное с потерями сжатие с некоторым ключом, который сбрасывает состояние (или фактически разрезает на блоки). Детали более сложные.
Теперь вот пара идей для решения этой проблемы:
- Создание индекса : Как и при открытии ZIP, вы можете увидеть все файлы в нем
- Разрежьте сжатый файл на блоки , а затем используйте бинарный поиск в каждом блоке (фактически аналогично первому)
- Распаковать в память , но фактически отбрасывать любые данные, пока вы не найдете начало искомых данных.
Последний способ подходит для небольших сжатых файлов, а блочный метод - для больших сжатых файлов. Вы можете смешать два.
PS: исправлено с помощью ввода, не означает, что сжатый файл будет исправлен с помощью. Так что это довольно бесполезная информация.