Что самое большее, что GZIP или DEFLATE может увеличить размер файла?

Хорошо известно, что GZIP или DEFLATE (или любой другой механизм сжатия) могут иногда увеличивать размер файла. Существует ли максимальный (в процентах или постоянный) размер файла, который можно увеличить? Что это?

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

ОБНОВЛЕНИЕ: есть две накладные расходы: GZIP добавляет заголовок, обычно 18 байтов, но по существу произвольно длинный. Что насчет DEFLATE? Это может расширить содержание мультипликативным фактором, который я не знаю. Кто-нибудь знает, что это?

2 ответа

Решение

gzip добавит заголовок и трейлер не менее 18 байтов. Заголовок также может содержать путь, который добавит столько байтов плюс завершающий ноль.

Реализация deflate в gzip имеет возможность хранить 16383 байта на блок, с накладными расходами в пять байтов. Он всегда будет делать это, если альтернатива займет больше байтов. Таким образом, максимальное количество сжатых байтов для n входных байтов:

п + 5 (этаж (н / 16383) +1

Сжатые файлы всегда имеют заголовок, указывающий, как их распаковать.

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

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

GZip имеет по крайней мере 18 байтов служебной информации (заголовок + CRC-32 в нижнем колонтитуле) и может дополнительно содержать список файлов в архиве.

http://en.wikipedia.org/wiki/Gzip

Обратите внимание, что в особых ситуациях пользовательские алгоритмы сжатия могут уменьшить или устранить издержки заголовка. Например, я использовал пользовательский словарь сжатия, известный программному обеспечению сжатия и распаковки, для сжатия коротких текстов, так что заголовок не нужен. Это был довольно редкий случай использования и, вероятно, бесполезный в большинстве ситуаций (учитывая, что хранилище и пропускная способность относительно дешевы).

Другие вопросы по тегам