zlib: сжатый поток всегда один и тот же?

Гарантируется ли, что для данного уровня сжатия и заданного ввода сжатый поток всегда будет одним и тем же, а также для разных (и будущих) версий zlib?

Или можно как-то сделать так?

В противном случае мне пришлось бы скопировать какую-то конкретную версию zlib в свой проект и придерживаться ее. (Потому что мне нужна эта гарантия.)

Спасибо, Альберт


person Albert    schedule 06.03.2011    source источник
comment
Разве алгоритм сжатия не установлен стандартом? Это сделало бы очень маловероятным существенное изменение в будущем (не говоря уже о огромном перевесе существующих данных).   -  person Donal Fellows    schedule 06.03.2011


Ответы (3)


Это вообще не гарантировано. Можно генерировать бесконечное количество различных сжатых потоков с одинаковыми параметрами zlib. Вот почему существуют такие вещи, как gziphack: http://groups.google.com/group/comp.compression/browse_thread/thread/82fafc72949ed46c/0115418726ed45e1
http://www.advsys.net/ken/util/kzip.exe
http://www.advsys.net/ken/util/pngout.exe
http://www.walbeehm.com/download/DeflOpt207.7z
и т. д.

person Shelwien    schedule 06.03.2011
comment
Конечно, ясно, что существует множество различных сжатых потоков, которые распаковываются до одних и тех же данных. Но вопрос был не в этом. Вопрос заключался в том, будет ли алгоритм в zlib всегда генерировать одно и то же. Потому что в моем случае использования мне это нужно. - person Albert; 06.03.2011
comment
Я протестировал zlib 114 и 121-125, и сгенерированный код кажется идентичным для всех вариантов (хотя есть небольшие различия в заголовках zip-архивов). Но есть и другие библиотеки (например, версия zlib в Intel IPP), которые можно использовать вместо zlib, и они даже сейчас генерируют другой код. И нет никаких гарантий для будущих версий zlib, поскольку они могут включать параллельную обработку или некоторые другие функции, которые могут повлиять на сжатие. - person Shelwien; 07.03.2011

У zlib нет причин нарушать совместимость с такой огромной установленной базой. Нет никаких шансов, что сжатый поток zlib, созданный сегодня, больше не будет поддерживаться более новой версией zlib завтра или послезавтра. Вы можете смело полагаться на эту неявную гарантию: вся отрасль зависит от прямой и обратной совместимости zlib.

Более новые форматы без гарантии совместимости просто будут иметь другие имена, например, 7zip.

person Cyan    schedule 07.03.2011

Если вы используете ту же версию zlib, то сжатие будет точно таким же. Очевидно, никто ничего не может сказать о «предстоящих версиях».

person Gilad    schedule 06.03.2011