Есть ли функция для надувания (zlib/miniz), которая возвращает верхнюю границу размера надувания/распаковки?

Я знаю, что zlib/miniz предоставляет сжатиеBound, которое возвращает верхнюю границу размера дефляции/сжатия в соответствии с размером обычного текста. Это удобно.

Есть ли функция для надувания (zlib/miniz), которая возвращает верхнюю границу размера надувания/распаковки? Или простая формула определяет это? как:

decompress size = compressed size * factor

person junfx    schedule 14.11.2014    source источник


Ответы (1)


Да, но я не думаю, что вы найдете это очень полезным. Верхний предел в 1032 раза превышает размер входных данных.

person Mark Adler    schedule 14.11.2014
comment
а в том то и дело, что нельзя узнать номер, просканировав сжатые данные? - person junfx; 14.11.2014
comment
Вы можете определить размер несжатых данных, прочитав и расшифровав все сжатые данные без фактической записи несжатых данных и подсчитав, сколько байтов было бы записано. Это не верхняя граница, а точный размер. - person Mark Adler; 14.11.2014
comment
@MarkAdler Можно ли это сделать без предварительного выделения памяти? Я пытался сделать uncompress(NULL, &dsize, cbuf, csize);, но это не сработало. - person user966939; 03.06.2019
comment
@user966939 user966939 Нет, uncompress() не поддерживает это. Однако было бы просто распаковать и удалить данные с помощью функций inflate*, чтобы найти длину несжатых данных. Хотя было бы быстрее распаковать только один раз. Вы можете использовать realloc() или другие структуры данных с возможностью увеличения, чтобы увеличить размер выделенной памяти по мере необходимости, - person Mark Adler; 03.06.2019