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


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

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

Обновление: есть две накладные расходы: GZIP добавляет заголовок, обычно 18 байт, но по существу произвольно длинный. А как насчет дефлорации? Тот может расширить контент с помощью мультипликативного фактора, которого я не знаю. Кто-нибудь знает, что это такое?

2 6

2 ответа:

Gzip добавит заголовок и трейлер по крайней мере 18 байт. Заголовок может также содержать имя пути, которое добавит это количество байт плюс конечный ноль.

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

n+5 (этаж (n / 16383)+1)

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

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

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

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

Http://en.wikipedia.org/wiki/Gzip#File_format

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