Делаем из слона муху
 
20.05.2003
Петр Каньковски


 
стр. 1
стр. 2 >>

«Как уменьшить размер файла?» — еще один вечный вопрос помимо «Что делать?» и «Кто виноват?». Компактные архивы нужны всем — и пользователям, и программистам, и производителям больших программных пакетов. Поэтому архиваторы остаются одной из самых популярных категорий утилит.

В этом обзоре, кроме вполне обычных архиваторов, будут рассмотрены и «более экзотические», которые привлекли внимание автора великолепным сжатием и полезными дополнительными возможностями — по многим параметрам они превосходят конкурентов. Быть может, некоторые из выводов окажутся для вас неожиданными, и вы захотите сменить архиватор, которым обычно пользуетесь.

WinZip

Производитель: WinZip Computing
Сайт: www.winzip.com
Статус: shareware (21 день), $29
Размер дистрибутива: 1,7 Mбайт (версия 8.1)
Самый распространенный формат архивов сегодня — Zip, и самый распространенный архиватор — WinZip. Невысокая степень сжатия (ниже всех архиваторов нашего обзора) компенсируется хорошей скоростью и широкой известностью WinZip (как говорят поклонники других форматов, во многом незаслуженной).

Не достигая главной цели архиватора — хорошего сжатия, — программа привлекает новичков простым интерфейсом, а также мастерами для создания и распаковки архивов. Zip-архивы могут включать в себя комментарии и быть зашифрованными с использованием пароля. Поддержка многотомных архивов в самом формате Zip ограничена: их можно создавать только на дискетах, так как WinZip меняет метку диска, указывая в ней номер тома. Кроме того, WinZip позволяет разбивать архивы на части, но такие архивы не по зубам большинству других распаковщиков.

Стандартная версия WinZip может создавать только простейшие самораспаковывающиеся (SFX) архивы, но модуль распаковки почему-то очень большой — 61 Кбайт. Чтобы запустить программу после извлечения файлов из архива или изменить текст в окне распаковщика, вы должны купить утилиту WinZip Self-Extractor, заплатив еще $49.

Дополнительно WinZip поддерживает распаковку из архивов Cab, GZip, Tar и форматов кодирования UUencode, XXencode, BinHex и MIME; можно подключать архиваторы Arj, Lha, Arc, запуская их как приложение командной строки.
WinZip — один из первых архиваторов с графическим интерфейсом под Windows. Сегодня конкуренты обогнали его и по сжатию, и по удобству интерфейса. Вам может понадобиться WinZip, только если вы нуждаетесь в высокой скорости создания архивов. Платить же деньги за WinZip как за обычный Zip-архиватор, наверное, не стоит: в Интернете можно найти множество его бесплатных аналогов (см., например, www.filzip.com).

Info-Zip

Производитель: InfoZip group
Сайт: www.info-zip.org/pub/ infozip
Статус: freeware
Это не программа, а алгоритм сжатия, доступный программистам для свободного использования. Тем не менее, он вошел в наш тест, так как на нем построено zip-сжатие в Windows Commander, WinRar и во многих других программах. Алгоритм Info-Zip поддерживает многотомные архивы на дискетах, пароли, комментарии и остальные возможности формата Zip.

7-Zip

Производитель: Игорь Павлов
Сайт: www.7-zip.com
Статус: freeware, GPL
Размер дистрибутива: 463 Кбайт (версия 2.24), 978 Кбайт (версия 2.30 beta)
Архиватор 7-Zip позволяет создать хорошо сжатый zip-архив и, кроме того, поддерживает свой формат 7z с очень высокой степенью сжатия и возможностью создания непрерывных архивов. Можно легально пользоваться программой бесплатно, автор лишь просит поддержать разработку, выплатив ему вознаграждение размером в $20.

Основная работа с 7-Zip ведется через оболочку Windows, так что вы можете использовать Проводник, Windows Commander или любой другой файловый менеджер (для Far имеется отдельный плагин), вызывая скромное, но вполне достаточное по возможностям окно добавления файлов в архив. Уникальна способность программы открывать архив прямо в окне Проводника Windows. Есть и поддержка командной строки для операций с архивами.

Новая версия 2.30, которая пока находится в стадии бета-тестирования, содержит собственный файловый менеджер и поддерживает формат 7z. Степень сжатия в этом формате просто невероятна, она существенно превышает возможности коммерческих архиваторов Rar и Ace (см. итоговую таблицу). 7-Zip сжимает долго, но очень хорошо; распаковка идет гораздо быстрее. Используется основанный на LZ алгоритм LZMA (размер словаря до 256 Мбайт) и специальный алгоритм PPMdH для сжатия текстов. Конвертер адресов BCJ2 дает отличное сжатие программных файлов, хотя и требует большого объема оперативной памяти.

Кроме мелких недоработок интерфейса, которые, вероятно, будут исправлены в конечной версии, удручает только размер SFX-модуля: 70 Кбайт для самого примитивного распаковщика. Впрочем, следует учесть, что архиватор использует более сложные алгоритмы сжатия, чем его «коллеги». Вдобавок 7-Zip способен открывать архивы форматов Cab, Rar, Arj, GZip, BZip2, Tar, Cpio, Rpm и создавать GZip-, BZip2-, Tar-архивы. Программа не поддерживает многотомные архивы, комментарии, шифрование в формате 7z и записи для восстановления, но несмотря на это ее можно назвать лучшим архиватором по степени сжатия, который к тому же обладает простым и удобным интерфейсом без лишних «украшательств».

На мой взгляд, когда уровень проработанности интерфейса 7-Zip приблизится к WinRar, можно будет смело отбросить все остальные программы, рассмотренные в этом обзоре, и сказать, что лучше архиватора нет и не может быть.

Microsoft Cab SDK

Производитель: Microsoft
Сайт: www.microsoft.com/ workshop/prog/cab
Статус: freeware, открытый API
Размер дистрибутива: 548 Кбайт (версия 1.00.0601, март 1997 г.)
Поначалу формат Cab (cabinet file) давал невысокую степень сжатия по алгоритму MS-Zip. Но в 1997 году Microsoft добавила поддержку мощного алгоритма LZX, и Cab-архивы стали в среднем даже компактнее, чем старый Rar (до 2.9). Главное достоинство архивов в формате Cab/LZX состоит в том, что Windows версии 98 и выше может открыть их без каких-либо дополнительных программ. Просто дважды щелкните по архиву — появится окно с его содержимым, из которого можно перетащить файлы в другую папку, чтобы распаковать их.

Как это работает

Вы никогда не задумывались над тем, как вообще можно сжать данные и уместить в архив множество файлов? Алгоритм LZH, на разных модификациях которого построены все современные архиваторы, использует для этого два шага.
Идея первого шага, сжатия по Лемпелу-Зиву (LZ — первые буквы в LZH), станет понятной, если вспомнить, как «сжимают» статьи в энциклопедиях с помощью сокращений: предмет статьи обозначают одной буквой; к энциклопедии прилагают список сокращений наиболее употребительных слов. Точно так же и архиваторы составляют словарь, включающий часто повторяющиеся фрагменты файлов. Вместо этих фрагментов записываются короткие ссылки на участки словаря, что сокращает объем файлов.
Словарь приходится полностью держать в памяти, поэтому его размер ограничен. Некоторые архиваторы, например Rar, позволяют выбирать размер словаря. Имеет смысл ставить число побольше — сжатие от этого только улучшается.
Обычно архиваторы создают отдельный словарь для каждого файла. Благодаря этому им не приходится перепаковывать все файлы, если один из них был удален или изменен и часть общего словаря, которая содержала его данные, стала ненужной. Но когда одни и те же байты повторяются в нескольких файлах, выгоднее создать непрерывный (solid) архив с общим для всех файлов словарем. В непрерывных архивах дольше читаются или обновляются отдельные файлы, но сами архивы гораздо компактнее в тех случаях, когда вы сжимаете похожие файлы — например, несколько текстов на одну тему.
Шаг второй — это хаффмановское сжатие или кодирование (буква H в LZH). Вспомним такую интересную особенность азбуки Морзе: разные буквы в ней обозначаются неравным числом точек и тире. Почему буква Е обозначается одной точкой, А — точкой и тире, а Щ — комбинацией «два тире, точка, тире»? Первые две буквы употребляются чаще, и для них используется более короткий код — это сокращает время передачи телеграммы.
Теперь представьте файл, состоящий из разных комбинаций четырех букв: A, B, C, D. Очевидно, что нет нужды выделять на одну букву целый байт. Вполне достаточно использовать два бита, например 00 для A, 01 для B, 10 для C и 11 для D. Строка BAABABADADACAB займет 14 байт в несжатом виде (по байту на букву) и 28 бит = 4 байта в двухбитовом коде.
Используя принцип азбуки Морзе, можно сжать файл еще сильнее. В нашей строке буква A употребляется чаще всего, B — реже, а C и D совсем редко. Закодируем A как 0, B как 10, C как 110 и D как 111. Первые биты в обозначении каждой буквы не повторяются, и всегда можно расшифровать непрерывную последовательность вроде той, в которую превратилась наша строка: 100010010011101110110010. Здесь уже 24 бита, или 3 байта, — в четыре с половиной раз меньше, чем в исходной строке.
Комбинируя «сокращения» по Лемпелу-Зиву, сжатие на уровне битов по Хаффману и применяя различные ухищрения, архиваторы порой умудряются уменьшить объем файлов в несколько раз. Одни архиваторы лучше упаковывают тексты, другие — двоичные файлы и программы, третьи — графику и звук. Часто в одном архиваторе используется несколько режимов и алгоритмов, ориентированных на разные типы данных (например, в Ace и Rar).
Чтобы уменьшить размер текстового архива, часть словаря выносят из него в программу-архиватор. Скажем, для русского языка характерны буквосочетания пр, стр, но никогда не используются щр или кп. Часто встречаются предлоги в, от, союзы и, а. Почему бы не учесть это в алгоритме сжатия? Такой алгоритм станет лучше сжимать русские тексты, чем «универсальный» LZH.
Мультимедиа-сжатие основано по большей части на том, что размер единичного блока, который подвергается сжатию по Хаффману, увеличен до 3–4 байт и более. Полноцветная графика и звук состоят из точек и сэмплов размером по несколько байт, и такой алгоритм неплохо помогает уменьшить их «вес».
Сразу после разработки алгоритм LZH считался теоретическим пределом сжатия информации (говорили, что лучше сжать невозможно). Все современные архиваторы превосходят LZH по степени сжатия. Многие из них действительно подошли к возможному пределу — причем разные архиваторы подошли к нему с разных сторон, дав пользователям лучшее сжатие текста или графики, программ, лучший среди всех интерфейс или компактность архиватора, SFX-модуля.

 


 
стр. 1
стр. 2 >>

<<Telepat, Soft Activation и TrustBay, или Революция продолжается
Все материалы номера
Десктопом по фейсу >>