Re: Аналог утилиты tac для сжатого файла
> > А в типичном нам нужно хранить не полный вектор отступов, а только
> > те, которые еще нужны, а их вряд ли много - один, ну, два.
>
> Так файл-то надо задом наперёд пройти. Так что сначала дойти до конца,
> расставив контрольные точки, а потом идти с конца, когда их можно будет
> исключать.
Насколько я понимаю, у гзипнутого файла вполне есть структура, которую можно
распознать. Он на блоки поделен. Так что не надо будет идти до конца.
Как делает tac? Делает seek на глазок поближе к концу, читает блок вперед,
ищет концы строк. Целые строки выводит, запоминает только начало блока до
первой \n. Задействует, конечно, память под найденные позиции концов, но
только в пределах одного прочитанного блока, после вывода смело их забывает.
Так же можно делать и тут, только искать надо будет начало гзип-блока, и
запоминать его смещение первого из найденных, и начало раззипованного куска до
первой \n.
Хотя вообще у меня было такое ощущение, что zlib жмет блоки ограниченного
размера. Не сжатый блок делает ограниченного размера, а исходный. 32K по
умолчанию. Так что если есть уверенность, что файл сжат zlib'ом, то и файла
из одних концов строк бояться не надо - там максимальный размер разжатого
куска 32K.
А вот четкой уверенности в том, что можно, начав с любого места, уверенно
найти начало блока, у меня нет, но есть ощущение, что структура у него такова,
что да, можно.
--
/dev/null-транспортировка
Reply to: