zlib: comment dimensionner avail_out

Je voudrais dégonfler un petit bloc de mémoire (<= 16 Ko) en utilisant zlib. La sortie est également stockée dans un bloc de mémoire. Aucun access disque ou firebase database ici.

Selon la documentation, je devrais appeler deflate() plusieurs resockets jusqu’à ce que toute l’entrée soit dégonflée. Entre-temps, je dois augmenter la taille du bloc de mémoire où va la sortie.

Cependant, cela semble inutilement compliqué et peut-être même inefficace. Comme je connais la taille de l’entrée, ne puis-je pas prédéterminer la taille maximale requirejse pour la sortie, puis tout faire avec un seul appel à deflate() ?

Si oui, quelle est la taille de sortie maximale? J’assume quelque chose comme: taille de l’entrée + quelques octets supplémentaires

zlib a une fonction pour calculer la taille maximale à laquelle une mémoire tampon sera dégonflée. Votre hypothèse est correcte – la valeur renvoyée est la taille du tampon d’entrée + la taille de l’en-tête. Après la déflation, vous pouvez réaffecter le tampon pour récupérer la mémoire “perdue”.
De 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(). */