Я использую zlib для сжатия потока текстовых данных. Текстовые данные поступают в виде фрагментов, и для каждого фрагмента вызывается deflate()
, причем flush установлен на Z_NO_FLUSH
. После того, как все куски получены, вызывается deflate()
с flush, установленным на Z_FINISH
.
Естественно, deflate()
не производит сжатый вывод при каждом вызове. Она внутренне накапливает данные для достижения высокой степени сжатия. И это прекрасно! Каждый раз, когда deflate()
производит сжатый вывод, этот вывод добавляется к полю базы данных - медленный процесс.
Однако, когда deflate()
производит сжатые данные, эти данные могут не поместиться в предоставленный выходной буфер, deflate_out
. Поэтому потребуется несколько вызовов deflate()
. Именно этого я и хочу избежать:
Есть ли способ сделать
deflate_out
всегда достаточно большим, чтобыdeflate()
мог хранить в нем все сжатые данные каждый раз, когда он решает вывести их?
Примечания:
Общий размер несжатых данных не известен заранее. Как упоминалось выше, несжатые данные поступают в виде кусков, а сжатые данные добавляются к полю базы данных, также в виде кусков.
В включаемом файле zconf.h
я нашел следующий комментарий. Возможно, это то, что я ищу? Т.е. (1 максимальный размер в байтах сжатых данных, которые может создать
deflate()
?
/* Требования к памяти для deflate составляют (в байтах):
(1