> > А в типичном нам нужно хранить не полный вектор отступов, а только > > те, которые еще нужны, а их вряд ли много - один, ну, два. > > Так файл-то надо задом наперёд пройти. Так что сначала дойти до конца, > расставив контрольные точки, а потом идти с конца, когда их можно будет > исключать.
Насколько я понимаю, у гзипнутого файла вполне есть структура, которую можно распознать. Он на блоки поделен. Так что не надо будет идти до конца. Как делает tac? Делает seek на глазок поближе к концу, читает блок вперед, ищет концы строк. Целые строки выводит, запоминает только начало блока до первой \n. Задействует, конечно, память под найденные позиции концов, но только в пределах одного прочитанного блока, после вывода смело их забывает. Так же можно делать и тут, только искать надо будет начало гзип-блока, и запоминать его смещение первого из найденных, и начало раззипованного куска до первой \n. Хотя вообще у меня было такое ощущение, что zlib жмет блоки ограниченного размера. Не сжатый блок делает ограниченного размера, а исходный. 32K по умолчанию. Так что если есть уверенность, что файл сжат zlib'ом, то и файла из одних концов строк бояться не надо - там максимальный размер разжатого куска 32K. А вот четкой уверенности в том, что можно, начав с любого места, уверенно найти начало блока, у меня нет, но есть ощущение, что структура у него такова, что да, можно. -- /dev/null-транспортировка -- To UNSUBSCRIBE, email to debian-russian-requ...@lists.debian.org with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org Archive: http://lists.debian.org/87ipjaoa3k.wl%...@ran.pp.ru