[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Аналог утилиты tac для сжатого файла



> > А в типичном нам нужно хранить не полный вектор отступов, а только
> > те, которые еще нужны, а их вряд ли много - один, ну, два.
> 
> Так файл-то надо задом наперёд пройти. Так что сначала дойти до конца,
> расставив контрольные точки, а потом идти с конца, когда их можно будет
> исключать.

Насколько я понимаю, у гзипнутого файла вполне есть структура, которую можно
распознать.  Он на блоки поделен.  Так что не надо будет идти до конца.

Как делает tac?  Делает seek на глазок поближе к концу, читает блок вперед,
ищет концы строк.  Целые строки выводит, запоминает только начало блока до
первой \n.  Задействует, конечно, память под найденные позиции концов, но
только в пределах одного прочитанного блока, после вывода смело их забывает.
Так же можно делать и тут, только искать надо будет начало гзип-блока, и
запоминать его смещение первого из найденных, и начало раззипованного куска до
первой \n.

Хотя вообще у меня было такое ощущение, что zlib жмет блоки ограниченного
размера.  Не сжатый блок делает ограниченного размера, а исходный.  32K по
умолчанию.  Так что если есть уверенность, что файл сжат zlib'ом, то и файла
из одних концов строк бояться не надо - там максимальный размер разжатого
куска 32K.

А вот четкой уверенности в том, что можно, начав с любого места, уверенно
найти начало блока, у меня нет, но есть ощущение, что структура у него такова,
что да, можно.

-- 
/dev/null-транспортировка


Reply to: