Using iopipe to stream a gzipped file

Andrew aabrown24 at hotmail.com
Thu Jan 4 12:01:32 UTC 2018


On Thursday, 4 January 2018 at 02:44:09 UTC, Steven Schveighoffer 
wrote:
> On 1/3/18 12:03 PM, Andrew wrote:
>
>> Thanks for looking into this.
>> 
>
> So it looks like the file you have is a concatenated gzip file. 
> If I gunzip the file and recompress it, it works properly.
>
> Looking at the docs of zlib inflate [1]:
>
> " Unlike the gunzip utility and gzread() ..., inflate() will 
> not automatically decode concatenated gzip streams. inflate() 
> will return Z_STREAM_END at the end of the gzip stream.  The 
> state would need to be reset to continue decoding a subsequent 
> gzip stream."
>
> So what is happening is the inflate function is returning 
> Z_STREAM_END, and I'm considering the stream done from that 
> return code.
>
> I'm not sure yet how to fix this. I suppose I can check if any 
> more data exists, and then re-init and continue. I have to look 
> up what a concatenated gzip file is. gzread isn't good for 
> generic purposes, because it requires an actual file input (I 
> want to support any input type, including memory data).
>
> -Steve
>
> [1] 
> https://github.com/dlang/phobos/blob/master/etc/c/zlib.d#L874

Ah thank you, that makes sense. These types of files are 
compressed using the bgzip utility so that the file can be 
indexed meaning specific rows extracted quickly (there's more 
details of this here http://www.htslib.org/doc/tabix.html and the 
code can be found here: 
https://github.com/samtools/htslib/blob/develop/bgzf.c)


More information about the Digitalmars-d-learn mailing list