zlib, deflate: Сколько памяти выделять?

Я использую 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 

13
задан feklee 17 January 2012 в 23:04
поделиться