2016-11-05 7 views
0

Я хочу получить некоторую дополнительную информацию об сжатии ZIP. Я уже знал, что большинство инструментов используют алгоритм «deflate» по умолчанию, но сжатый размер одного и того же файла может быть другим. Итак, мой вопрос: «У архивов zip есть специальные заголовки для коэффициента сжатия?»Как получить коэффициент сжатия файла из zip-архива?

+0

коэффициент сжатия определяет, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Как только они будут найдены, формат будет таким же, для быстрого сжатия или лучшего сжатия. Возможно, единственным исключением является формат «store», который просто обертывает данные в формате 'zip' без сжатия (например,« tar') –

+0

@ Jean-François Fabre, Хмм, но сжатые файлы не одинаковы , Например, у меня размер сжатого файла размером 465 байт в .docx, созданный Word, и 464 байта, если я переупаковываю этот архив с помощью 7-zip. Представления шестнадцатеричных символов тоже не совпадают. Итак, почему байты сжатых файлов не одинаковы, если форматы равны? –

+0

Существует много сжатых потоков, которые представляют одни и те же несжатые данные. Знаете ли вы, что компрессоры, о которых вы говорите, предлагают уровни сжатия, которые обеспечивают большее сжатие с использованием большего количества процессорного времени и памяти? Они обязательно создают разные сжатые данные для одних и тех же несжатых данных. –

ответ

0

Центральный каталог zip-файла (который находится в конце) содержит для каждой записи сжатый и несжатый размер этой записи. Из этого вы можете вычислить коэффициент. Команда unzip Info-ZIP сделает это для вас с опцией -lv (list verbose), показывая соотношение в процентах в столбце Cmpr. Например:

% unzip -lv silesia.zip 
Archive: silesia.zip 
Length Method Size Cmpr Date Time CRC-32 Name 
-------- ------ ------- ---- ---------- ----- -------- ---- 
10192446 Defl:X 3871628 62% 04-12-2002 13:21 af3a6b76 dickens 
51220480 Defl:X 19016809 63% 05-31-2002 19:50 7fb0ab7d mozilla 
9970564 Defl:X 3671595 63% 03-20-2003 10:12 a341883f mr 
33553445 Defl:X 3200182 91% 04-02-2002 21:21 60ff63d3 nci 
6152192 Defl:X 3096017 50% 07-04-2002 05:00 a023e1fa ooffice 
10085684 Defl:X 3739532 63% 04-11-2002 18:56 a0ca388c osdb 
6627202 Defl:X 1860075 72% 04-02-2002 22:40 50d35f03 reymont 
21606400 Defl:X 5446199 75% 03-25-2002 13:34 2beac5f3 samba 
7251944 Defl:X 5331793 27% 03-24-2002 00:38 fda125bf sao 
41458703 Defl:X 12213941 71% 03-25-2002 09:39 01f5a2e9 webster 
5345280 Defl:X 688808 87% 11-30-2000 23:54 ff8f3051 xml 
8474240 Defl:X 6045111 29% 04-04-2002 13:00 c86a35c6 x-ray 
--------   ------- ---       ------- 
211938580   68181690 68%       12 files 
+0

Я пытаюсь сравнить архив .docx, созданный Word с переупакованным по 7-zip (файлы одинаковые). И у меня есть 465 и 464 байта для того же файла для каждого архива соответственно. Итак, WinRar показывает мне (да, я использую WinRar только для получения коэффициента сжатия) равного процента, из-за округления, я думаю. Мне нужно знать, как получить сжатые данные, например, в .docx Word. –

+0

Я не заметил в первый раз, unzip может показать уровень сжатия, как 'Defl: X'. 'X' означает максимальное сжатие. Как распаковывает его? –

+0

В двоичном бите общего назначения есть два бита для записи в zip-файле, которые обеспечивают ключ к используемому уровню сжатия. Однако два бита не могут указывать девять или десять уровней, поэтому вы, как правило, не знаете используемый уровень, и не знаете, какой код сжатия или какая версия кода сжатия была использована. –