Вопрос Почему zip-файл больше, чем исходный файл, особенно когда он является текстом?


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

enter image description here

EDIT0

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

enter image description here


4
2017-08-29 06:39


происхождения


И это простой текстовый файл журнала 1 ГБ? - CyberSkull
@CyberSkull - Да, это так. - PeanutsMonkey
Не могли бы вы рассказать нам, каковы были ваши параметры zip? Я бы сделал что-то вроде zip -9T "example.zip" sample.log (-t это просто проверка целостности архива.). - CyberSkull
Случайные данные из / dev / urandom не генерировать истинный текстовый файл; он вообще не будет сжиматься. Текстовые байты ограничены в диапазоне, со многими пробелами и повторяющимися шаблонами (например, «th» и «sp») и словами. Фактически вы создали случайный двоичный файл. - Ken
@CyberSkull: Нет, у вас есть случайный поток символов ASCII. Это немного более сжимаемое, чем случайное двоичное, но все же нигде не похоже, как структурированное как текст. - Ben Voigt


ответы:


Как сказал @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 флаг, когда вы зажимаете, чтобы увидеть свои сбережения, когда идете.


7
2017-08-29 07:08



Когда вы говорите, что размер файла не изменился, если я его распакую, вы имеете в виду размер архива? Во-вторых, если бы я использовал другой метод сжатия, отличный от DEFLATE, такой как PPMD, будет ли это иметь значение? Поэтому, когда вы говорите -V флаг, вы имеете в виду, когда я выполняю zip команда? - PeanutsMonkey
Также, когда вы говорите тип файла, вы имеете в виду тип файла, источником которого является, например, источник. текст, MP3 и т. д.? - PeanutsMonkey


Поскольку накладные расходы на .zip-заголовки путь более 19 байт.


4
2017-08-29 06:43



Как это влияет на большие текстовые файлы? - PeanutsMonkey


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

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

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


1
2018-05-28 19:27