4

У меня есть текстовый файл размером 19 байтов, и, сжав файл с помощью zip и 7zip, он кажется больше. Я прочитал вопрос о том, почему 7zip-файл больше, чем raw-файл? а также почему ZIP Compression ничего не сжимает? но, учитывая, что файл еще не сжат, я ожидал дальнейшего сжатия. Прикреплен скриншот.

EDIT0

Я продолжил этот пример, создав файл со случайными данными следующим образом: dd if=/dev/urandom of=sample.log bs=1G count=1 и попытался сжать файл, используя как zip, так и 7zip, однако при этом сжатие не было получено. , Это почему?

3 ответа3

8

Как сказал @kinokijuf, есть заголовок файла. Но, чтобы расширить это, есть еще несколько вещей, которые нужно понять о сжатии файлов.

Заголовок zip содержит всю необходимую информацию для определения типа файла (магическое число), версию zip и, наконец, список всех файлов, включенных в архив.

Ваш файл, вероятно, не был сжат в любом случае. Если вы запустите unzip -l example.zip вы, вероятно, увидите, что размер файла не изменился. 19 байтов, вероятно, будут генерировать больше служебных данных, чем было бы сохранено, если бы они вообще были сжимаемы DEFLATE (основной метод сжатия, используемый zip).

В других случаях, например, PNG-изображения, они уже сжаты, поэтому zip просто сохранит их. DEFLATE не будет беспокоить сжатие уже сжатого.

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

Вы получите максимальную экономию при сжатии очень регулярных отформатированных данных, таких как текстовый файл, содержащий дамп SQL. Например, однажды у меня был дамп небольшой базы данных SQL размером около 13 МБ. Я запустил на нем zip -9 dump.sql dump.zip и в итоге получил около 1 МБ.

Другим фактором является ваш уровень сжатия. Многие архиваторы по умолчанию сжимают только на среднем уровне, что приводит к снижению скорости. При сжатии с помощью zip попробуйте флаг -9 для максимального сжатия (я думаю, что в руководстве 3.x сказано, что в настоящее время уровни сжатия поддерживаются только DEFLATE).

TL; DR

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

4

Потому что заголовки .zip намного больше, чем 19 байтов.

1

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

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

Существует целая наука, теория информации, которая занимается измерением плотности информации (и взаимной информации) и использует избыточность и структуру для выполнения сжатия, атак на шифрование, а также обнаружения и восстановления ошибок.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .