Как стать автором
Обновить

Сжатие ZIP

Время на прочтение3 мин
Количество просмотров73K
Здравствуй Хабр!
Данная статья посвящена, как правильно и максимально сжимать файлы в ZIP-архивы. Данную статью я решил написать по той причине, что очень много приложений свои форматы упаковывают именно в ZIP. В данной статье разберем методы сжатия ZIP, приложения для сжатия в ZIP, и как можно улучшить сжатие.

Метод сжатия в ZIP


Для начало предлагаю разобрать с тем, что ZIP поддерживает разные методы сжатия (Copy, Deflate, Deflate64, BZip2, LZMA, PPMd), но мы будем рассматривать только один метод сжатия — Deflate, по той причине, что именно данный метод используют большинство приложений, которые упаковывают свои форматы в ZIP. Вот небольшой список форматов файлов, которые на самом деле являются ZIP-архивами — open-file.ru (введите в поиске ASCII-дескриптор заголовка — PK). Сразу оговорюсь, это только небольшой перечень файлов.

Метод сжатия Deflate


На сегодняшний день есть несколько библиотек, основанных на методе сжатия Deflate:
Библиотека Deflate Скорость работы Степень сжатия Приложения
Zlib Высокая Низкая
7-zip Средняя Средняя 7-zip, advzip
Kzip Низкая Высокая kzip
Так что перед тем как выбирать архиватор для ZIP, необходимо понять какой результат нам нужен, и сколько времени готовы затратить для его получения. для Deflate характерно, чем выше степень сжатия, тем больше времени придется затратить.

image

Архиваторы ZIP


В данном разделе, мы будем рассматривать только те приложения, которые бесплатные для использования.

Алгоритм 7-zip

Здесь мы поговорим о двух программах, где реализован алгоритм 7-zip: 7-zip и advzip.
При создании zip-архива в помощью 7-zip, я использую следующие параметры

-r -mm=Deflate -y -tzip -mpass=15 -mfb=258 -mx9

Особенность работы advzip в том, что он уже работает с готовыми архивами zip, т.е. вы просто указываете путь к архиву, и он сам пытается его сжать. Бывает удобно когда у вас уже есть готовый архив, и вам не надо распаковывать и архивировать еще раз.

Алгоритм kzip

Алгоритм kzip был реализован в приложении kzip, приложение работает крайне медленно, но практически всегда дает лучший результат. У него есть настройки (/s, /n, /b), которые могут улучшить/ухудшить степень сжатия ZIP.

Рекомендации


Здесь я хотел дать несколько рекомендаций, как получать наилучшую степень сжатия (рекомендации основаны, на личном опыте):
  • Если вы архивируете файлы, и там есть архивы ZIP, рекомендую эти архивы разжать (для удобства можно использовать advzip с параметром /z0). Это объясняется тем, что метод Deflate не поддерживает непрерывные архивы, т.е. получается, что когда метод Deflate пытается сжать разжатый архив, разжатый архив в этом случаи предстает как один целый файл и его содержимое сжимается как непрерывный архив.
  • Если вы хотите получить максимальный эффект сжатия, то можете воспользоваться приложением zipmix. Допустим вы создали два одинаковых по содержанию архива zip с помощью kzip, но разными настройками, и в итоги получали разные по размеру архивы. Но это не означает, что все файлы, которые вы сжали в первом архиве имеют по отдельности в сжатом виде меньший размер, чем во втором архиве. Для этих целей нужен zipmix, он создает из двух архивов третий архив, с меньшим размером, т.к. он сравнивает каждый файл по отдельности, и выбирает тот вариант, где размер меньше. zipmix работает не только с архивами kzip.

Практика


И так решил показать, как это все работает. Для примера я взял игру для iPad — Angry Birds HD версии 2.0.0. Исходный размер игры 13 547 363 байт.
Приложения Результат, байт Затраченное время, секунда
advzip 12 891 768 195
7-zip 12 891 143 720
kzip 12 877 794 2770
7-zip+advzip 12 858 419
kzip+advzip 12 849 101
kzip+7-zip+advzip 12 842 760

Как видно zipmix может ненамного улучшить степень сжатия. Лично мне когда надо получить максимум объединяю просто все три (kzip + advzip + 7-zip) результата в один. Это на много лучше, чем пытаться перебирать параметры в kzip.
Теги:
Хабы:
-4
Комментарии11

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн