[iostreams] Flushing a zlib_compressor... how to obtain a “zlib sync flush” ?
Is there some magic required to obtain a "zlib sync flush" when using boost::iostreams::zlib_compressor ? Just invoking flush on the filter, or strict_sync on a filtering_ostream containing it doesn't see to do the job (ie I want the compressor to flush enough that the decompressor can recover all the bytes consumed by the compressor so far, without closing the stream; I remember using such a feature when driving zlib directly in the past, and there's a page http://www.bolet.org/~pornin/deflate-flush.html describing it nicely). Looking at the header, there seem to be some "flush codes" defined (notably a sync_flush) but it's unclear to me how they should be used (bearing in mind my compressor is just added into a filtering_ostream's chain, although I do have a reference to it if some specific method needs invoking). Thanks for any tips. Tim
On 3/18/2010 5:31 AM, Tim Day wrote:
Is there some magic required to obtain a "zlib sync flush" when using boost::iostreams::zlib_compressor ? Just invoking flush on the filter, or strict_sync on a filtering_ostream containing it doesn't see to do the job (ie I want the compressor to flush enough that the decompressor can recover all the bytes consumed by the compressor so far, without closing the stream; I remember using such a feature when driving zlib directly in the past, and there's a page http://www.bolet.org/~pornin/deflate-flush.html describing it nicely).
Looking at the header, there seem to be some "flush codes" defined (notably a sync_flush) but it's unclear to me how they should be used (bearing in mind my compressor is just added into a filtering_ostream's chain, although I do have a reference to it if some specific method needs invoking).
This is currently a feature request. In the ticket comments, the library author refers to a mailing list thread wherein he does reply with how the library works now: See https://svn.boost.org/trac/boost/ticket/1656
On Thu, 2010-03-18 at 21:00 -0700, eg wrote:
On 3/18/2010 5:31 AM, Tim Day wrote:
Is there some magic required to obtain a "zlib sync flush" when using boost::iostreams::zlib_compressor ?
This is currently a feature request. In the ticket comments, the library author refers to a mailing list thread wherein he does reply with how the library works now:
Thanks that's useful info. The fundamental problem seems to be that the symmetric_filter that zlib_compressor inherits from isn't itself flushable (which seems rather an oversight). Any idea what it would take to add flushable ? On the face of it, it might be as simple as adding the flushable_tag and exposing the existing private flush methods. Or is there much more to it than that ? (I want to give it try at some point). Tim
participants (2)
-
eg
-
Tim Day