Zlib: Различия между функциями `deflate` и` compress`

В чем разница между функциями deflate() и compress() в zlib?

Я просмотрел онлайн-примеры, а некоторые использовали deflate, в то время как другие использовали компресс.

Как я могу решить, в какой ситуации я буду использовать один над другим?

Ответ 1

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

deflate() используется для сжатия данных на куске за раз и/или для сжатия в других форматах, таких как gzip-wrapped или raw, а также с другими параметрами, такими как уровни памяти и стратегии сжатия.

Вы бы использовали compress(), если у вас есть все доступные данные одновременно и достаточно памяти для хранения результата, и вы хотите, чтобы формат сжатия по умолчанию, использование памяти и стратегия. В противном случае вы должны использовать deflate().

deflate() не используется сам по себе. Для инициализации структуры z_stream, используемой deflate(), вам нужно использовать deflateInit() или deflateInit2(). Затем вы вызываете deflate() один или несколько раз, чтобы принимать данные для сжатия и предоставлять результат. В конце, deflateEnd() вызывается для освобождения ресурсов памяти, используемых в структуре. Вы можете прочитать документацию в zlib.h и http://zlib.net/zlib_how.html для получения дополнительной информации.