Для этого вам нужно придумать свой собственный формат сжатия;все существующие библиотеки (gzip, bzip2, lzma) являются потоковыми, но не разбиты на части (т.е. вы не можете искать в сжатом потоке).
Одним из решений является создание файла, подобного ZIP-архиву: поток записейсопровождаемый оглавлением (TOC).В вашем случае все записи (= чанки) будут иметь одинаковый размер перед сжатием.
Попробуйте размер чанка 4 КБ;это все равно должно дать довольно хорошее сжатие, разумное количество служебных данных и быстрое время декомпрессии на чанк.Запишите сжатые фрагменты в файл и запишите начальное смещение для каждого в оглавлении.
При поиске в потоке найдите необходимое смещение 4 КБ, прочитайте смещение из оглавления, прочитайте сжатый фрагмент,и распакуйте его.
[EDIT] Вам необходимо создать небольшой инструмент, который может начать распаковку в любом месте архива и который просто продолжает распаковываться, пока не будет достигнут EOF.Но вы, вероятно, хотите знать, какая часть файла less
отображается в данный момент.Простого решения этого не существует.less
предназначен для отображения потока.Он не может «искать» в этом потоке;вместо этого less
создаст буфер где-то, в котором он может искать.Если вы хотите избежать этого (обычно потому, что файл слишком большой), вы должны написать свою собственную версию less
.
В качестве альтернативы, взгляните на исходный код less
.Может быть, вы можете заменить часть «буферного ввода» кода чем-то, что может говорить с вашим декодером.