Я хотел бы иметь возможность делать произвольный доступ в gzip файл. Я могу позволить себе сделать некоторую предварительную обработку (например, построить какой-то индекс), при условии, что результат предварительной обработки намного меньше, чем сам файл.
Любые советы?
Мои мысли были:
- Взломать существующую реализацию gzip и сериализовать ее состояние декомпрессора, скажем, 1 мегабайт сжатых данных. Затем, чтобы сделать произвольный доступ, десериализуйте состояние декомпрессора и прочитайте с границы мегабайта. Это кажется сложным, тем более, что я работаю с Java, и я не смог найти реализацию gzip pure-java: (
- Скомпилируйте файл в кусках 1Mb и выполните то же самое, что и выше. Это имеет недостаток в удвоении необходимого дискового пространства.
- Напишите простой синтаксический анализатор формата gzip, который не выполняет распаковки, и только обнаруживает и индексирует границы блоков (если даже есть какие-либо блоки: я еще не читал описание формата gzip)