Я хочу получить некоторую дополнительную информацию об сжатии ZIP. Я уже знал, что большинство инструментов используют алгоритм «deflate» по умолчанию, но сжатый размер одного и того же файла может быть другим. Итак, мой вопрос: «У архивов zip есть специальные заголовки для коэффициента сжатия?»Как получить коэффициент сжатия файла из zip-архива?
ответ
Центральный каталог 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
Я пытаюсь сравнить архив .docx, созданный Word с переупакованным по 7-zip (файлы одинаковые). И у меня есть 465 и 464 байта для того же файла для каждого архива соответственно. Итак, WinRar показывает мне (да, я использую WinRar только для получения коэффициента сжатия) равного процента, из-за округления, я думаю. Мне нужно знать, как получить сжатые данные, например, в .docx Word. –
Я не заметил в первый раз, unzip может показать уровень сжатия, как 'Defl: X'. 'X' означает максимальное сжатие. Как распаковывает его? –
В двоичном бите общего назначения есть два бита для записи в zip-файле, которые обеспечивают ключ к используемому уровню сжатия. Однако два бита не могут указывать девять или десять уровней, поэтому вы, как правило, не знаете используемый уровень, и не знаете, какой код сжатия или какая версия кода сжатия была использована. –
коэффициент сжатия определяет, _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ Как только они будут найдены, формат будет таким же, для быстрого сжатия или лучшего сжатия. Возможно, единственным исключением является формат «store», который просто обертывает данные в формате 'zip' без сжатия (например,« tar') –
@ Jean-François Fabre, Хмм, но сжатые файлы не одинаковы , Например, у меня размер сжатого файла размером 465 байт в .docx, созданный Word, и 464 байта, если я переупаковываю этот архив с помощью 7-zip. Представления шестнадцатеричных символов тоже не совпадают. Итак, почему байты сжатых файлов не одинаковы, если форматы равны? –
Существует много сжатых потоков, которые представляют одни и те же несжатые данные. Знаете ли вы, что компрессоры, о которых вы говорите, предлагают уровни сжатия, которые обеспечивают большее сжатие с использованием большего количества процессорного времени и памяти? Они обязательно создают разные сжатые данные для одних и тех же несжатых данных. –