簡體   English   中英

zlib:如何維度avail_out

[英]zlib: how to dimension avail_out

我想使用zlib來縮小一小塊內存(<= 16 KiB)。 輸出也存儲在存儲器塊中。 這里沒有磁盤或數據庫訪問。

根據文檔,我應該反復調用deflate() ,直到整個輸入被放氣。 在這兩者之間,我必須增加輸出所在的內存塊的大小。

然而,這似乎不必要地復雜,甚至可能效率低下。 由於我知道輸入的大小,我不能預先確定輸出所需的最大大小,然后只需一次調用deflate()嗎?

如果是這樣,最大輸出尺寸是多少? 我假設一樣的東西:輸入的大小+一些字節開銷

zlib具有計算緩沖區將縮小到的最大大小的函數。 您的假設是正確的 - 返回的值是輸入緩沖區的大小+標題大小。 通貨緊縮后,您可以重新分配緩沖區以回收“浪費”的內存。
來自zlib.h:

ZEXTERN uLong ZEXPORT deflateBound OF((z_streamp strm, uLong sourceLen));
/*
   deflateBound() returns an upper bound on the compressed size after
   deflation of sourceLen bytes.  It must be called after deflateInit() or
   deflateInit2(), and after deflateSetHeader(), if used.  This would be used
   to allocate an output buffer for deflation in a single pass, and so would be
   called before deflate().
*/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM