Почему маленький архив становится огромным

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

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

Как распаковка приводит к сбою

Чтобы открыть архив, программа считывает его содержимое, создаёт файлы и размещает данные в оперативной памяти или на накопителе. Если распакованный объём превышает доступные ресурсы, системе некуда поместить очередную порцию данных. Программа может начать работать крайне медленно, сообщить об ошибке или завершиться аварийно.

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

Размер файла — не предел его воздействия

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

Показательный контраст прост: файл, который легко переслать за секунду, способен потребовать столько ресурсов при открытии, что остановится не только распаковка, но и другие приложения на устройстве.