ZIP-файл: что это, как работает и почему не всегда сжимает

ZIP — один из самых привычных форматов архивов. Им пользуются почти везде: от вложений в почте до дистрибутивов ПО и бэкапов. Ниже — что это за формат, как устроено сжатие, почему «зазиповать» JPEG почти бесполезно и как работать с ZIP в Windows и Linux.

Что такое ZIP-файл

ZIP — формат контейнера для одного или нескольких файлов и папок. Данные можно сжать или положить «как есть» (store). Формат открытый, давно стандартизирован и поддерживается ОС «из коробки».

Зачем он нужен

  • Сжатие — текст, логи, исходники, CSV обычно заметно уменьшаются (часто алгоритм Deflate).
  • Один файл вместо кучи — удобно передавать и хранить структуру каталогов.
  • Пароль — часть инструментов умеет шифровать содержимое (стойкость зависит от метода и ПО).
  • Кроссплатформенность — Windows, Linux, macOS, мобильные ОС открывают ZIP без экзотики.
  • Store без сжатия — имеет смысл для уже сжатых медиа и когда важна скорость, а не размер.

Как открыть ZIP

Windows: двойной клик — проводник открывает архив как папку. Контекстное меню «Извлечь всё…» распаковывает на диск.

Linux / macOS (терминал):

unzip archive.zip
unzip archive.zip -d /path/to/dir

Android / iOS: современные системы часто открывают ZIP встроенно; при необходимости — ZArchiver, RAR и аналоги.

Как создать ZIP

Windows: выделить файлы → ПКМ → «Отправить» → «Сжатая ZIP-папка» (формулировка может чуть отличаться в разных версиях).

Linux / macOS:

zip -r archive.zip folder/
zip -r archive.zip file1.txt file2.txt

Графические и консольные альтернативы: 7-Zip, WinRAR, peazip и др. Удобны, если нужны другие алгоритмы, шифрование AES или разбиение на тома.

Как работает сжатие в ZIP (Deflate)

Классический ZIP чаще всего использует Deflate — сжатие без потерь. После распаковки данные байт в байт совпадают с исходником. Deflate сочетает два подхода.

LZ77

  • Ищет повторяющиеся фрагменты в уже просмотренном «окне» данных.
  • Вместо повторной записи подставляет ссылку вида «вернись на N байт, возьми L байт».
  • Текст с повторами, XML, код, логи сжимаются хорошо; «шумные» данные — плохо.

Кодирование Хаффмана

  • Частые символы (или токены после LZ77) кодируются короткими битовыми кодами.
  • Редкие — более длинными. В сумме поток занимает меньше бит.

Упрощённый пример

Исходная строка с сильным повтором:

ABABABABABABABABAB

После LZ77 идея сводится к «AB» и указанию повторить пару много раз (в реальности запись — пары offset/length, не дословный псевдокод). Затем Хаффман ужимает частотные токены. На практике 18 почти одинаковых байт превращаются в короткий битовый поток — отсюда выигрыш на тексте и логах.

Внутреннее устройство ZIP

Архив — не «просто куча сжатых байт», а понятная структура:

  • Локальные заголовки у каждого файла: имя, размеры, метод сжатия, CRC и т.д.
  • Сжатые (или store) данные сразу после локального заголовка.
  • Центральный каталог — сводный список всех записей (его обычно читают архиваторы в первую очередь).
  • Концевая запись (EOCD) — указатель на центральный каталог, чтобы быстро открыть архив с конца файла.

Именно из-за центрального каталога можно перечислить файлы без полной распаковки всего архива.

Какие методы сжатия бывают в ZIP

Не каждый ZIP — обязательно Deflate. Встречаются, в частности:

  • Store (0) — без сжатия. Рационально для JPEG, MP3, MP4, уже готовых .zip/.7z.
  • Deflate — де-факто стандарт, максимальная совместимость.
  • BZIP2 — часто лучше по размеру на части данных, медленнее, хуже поддержка «везде».
  • LZMA / LZMA2 — ближе к 7z по эффективности; не все старые распаковщики поймут.
  • PPMd — силён на тексте, не универсален по софту.

Если архив должен открываться на любом ПК «двумя кликами», безопасный выбор — обычный Deflate или Store.

Почему ZIP не всегда уменьшает файлы

Сжатие без потерь ищет избыточность. Если её уже «выжали» другим кодеком, Deflate почти нечего делать: заголовки ZIP даже чуть увеличат размер.

  • JPEG, PNG, WebP, MP3, AAC, MP4, MKV — уже сжаты. ZIP почти не поможет.
  • Шифротекст и случайные данные — выглядят как шум, повторов мало.
  • Уже архивы (.zip, .rar, .7z, .gz) — повторное сжатие бессмысленно.

Хорошо сжимаются: plain text, JSON/XML/CSV, исходники, логи, многие дампы БД, несжатый WAV/BMP (но их чаще перекодируют специализированными форматами, а не ZIP).

Нужен максимальный выигрыш по размеру на смешанном наборе файлов — смотрите 7z (LZMA2) или RAR; помните про совместимость у получателя.

Краткий чеклист

  • Передать папку с проектом или логами — ZIP с Deflate идеален.
  • Сложить пачку видео/фото — Store или сразу облако/торрент; ждать «в 10 раз меньше» не стоит.
  • Нужен пароль — проверяйте, что и создатель, и получатель используют нормальное AES-шифрование, а не устаревший ZipCrypto, если важна защита.
  • Скрипты и CI — zip/unzip или 7z в зависимости от требований к формату.

Итог

ZIP остаётся универсальным «общим знаменателем» для упаковки файлов: просто, совместимо, достаточно для текста и кода. Он не волшебная кнопка «сжать всё»: медиа и уже сжатые контейнеры почти не ужимаются. Когда важнее размер, а не совместимость со старым софтом, разумны 7z или RAR; когда важнее «откроется у всех» — классический ZIP.

Источники и ссылки


Комментарии загружаются…