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

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

В случайной последовательности байтов таких удобных закономерностей почти нет. Следующий байт нельзя предсказать по предыдущим, а длинные повторы не встречаются достаточно часто, чтобы их выгодно было заменять ссылками. Алгоритму нечего убрать: чтобы сохранить данные точно, он должен по-прежнему передать почти всю информацию.

Откуда берётся лишний размер

Архиву нужны служебные записи: например, сведения о файлах и их расположении, а также контрольные данные для проверки целостности. Если сжатый поток получился лишь немногим короче исходного, этот служебный объём может перевесить экономию. Тогда ZIP-файл окажется больше исходного.

Дело не в том, что ZIP обязательно пытается ужать любой файл любой ценой: формат позволяет хранить данные без сжатия, и архиватор может выбрать такой способ. Но если случайные данные всё же пропустить через сжатие, заметного выигрыша обычно не будет. Сжимается не “любой большой файл”, а избыточность в нём — поэтому текст часто уменьшается, а уже сжатые или случайные данные почти нет.