Есть ли способ получить расширенный размер файла gzip без фактического расширения? - PullRequest
2 голосов
/ 07 января 2010

Поскольку развертывание большого файла gzip занимает довольно много времени (иногда более полминуты), я хотел бы узнать расширенный размер, прежде чем начинать расширение (для целей отчета о прогрессии). Есть ли способ узнать это без фактического расширения?

Обновление

Для файла размером более 4 ГБ (расширенный размер) нет точного способа узнать размер без фактического расширения файла gzip. Однако для файлов размером менее 4 ГБ (расширенный размер) фактический расширенный размер сохраняется как последние 4 байта файла gzip и может быть легко получен:

(1..4).inject(0) do |v, i| 
  v += IO.read(file_name, 1, original_size - i)[0] * (2**8) ** (4 - i)
end

Ответы [ 2 ]

2 голосов
/ 11 января 2010

Просто хочу закрыть этот вопрос, так как я нашел решение. Обновили его выше.

1 голос
/ 07 января 2010

Я не думаю, что вы можете получить точный размер, так как для этого потребуется знать фактические частоты различных строк в файле, и вы не сможете сделать это без сканирования файла. Можете ли вы перейти к действительной функции декомпрессии и указать, как далеко она проходит через вход (по сравнению с тем, насколько далеко он находится)?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...