Как ZIP находит повторения
ZIP не пытается понять смысл текста: для него важна последовательность байтов — чисел, которыми компьютер представляет символы и другие данные. Если одна и та же последовательность встречается снова, архиватор может не записывать её целиком, а указать, где похожий фрагмент уже был сохранён.
Для этого в формате DEFLATE, который часто используется внутри ZIP, применяется скользящее окно: программа анализирует ограниченный участок уже обработанных данных и ищет в нём совпадения. Найденный повтор кодируется как пара «насколько далеко назад искать» и «сколько байтов скопировать». Так длинная повторяющаяся строка может занять всего несколько коротких кодов.
Почему архив иногда получается меньше
Экономия зависит от структуры данных. Текст с повторяющимися словами, пробелами и шаблонами обычно хорошо сжимается: однажды записанный фрагмент можно многократно обозначать короткой ссылкой. А уже сжатые фотографии или случайные данные почти не содержат легко используемых повторов, поэтому ZIP не всегда уменьшает их размер; служебные сведения архива даже могут немного его увеличить.
Повторы — не единственный приём. После их кодирования ZIP может компактнее записать часто встречающиеся символы и команды, назначая им короткие коды. В итоге размер зависит и от того, что повторяется, и от того, насколько выгодно закодировать оставшуюся последовательность.
Как распаковка возвращает точные данные
При распаковке программа читает ссылку и копирует указанные байты из уже восстановленного фрагмента. Поскольку сведения указывают точное расстояние и длину, исходные байты можно собрать без приблизительных замен или потери деталей.
Есть важное следствие: ссылка может вести к данным, которые сами были восстановлены из более ранних ссылок. Поэтому распаковщик обрабатывает поток последовательно — каждый новый фрагмент становится доступен для следующих. Архив экономит место не тем, что забывает часть текста, а тем, что вместо повторной записи использует уже восстановимый шаблон.






