public override int Read(byte[] b, int off, int len)
{
if(len==0)
return(0);
int err;
z.next_out=b;
z.next_out_index=off;
z.avail_out=len;
do {
if((z.avail_in==0)&&(!nomoreinput)) { // if buffer is empty and more input is avaiable, refill it
z.next_in_index=0;
z.avail_in=inp.Read(buf, 0, BUFSIZE);//(BUFSIZE<z.avail_out ? BUFSIZE : z.avail_out));
if(z.avail_in<=0) {
z.avail_in=0;
nomoreinput=true;
}
}
err=z.inflate(flushLevel);
if(nomoreinput&&(err==JZlib.Z_BUF_ERROR))
return(0);
if(err!=JZlib.Z_OK && err!=JZlib.Z_STREAM_END)
throw new IOException("inflating: "+z.msg);
if((nomoreinput||err==JZlib.Z_STREAM_END)&&(z.avail_out==len))
return(0);
}
while(z.avail_out==len&&err==JZlib.Z_OK);
//System.err.print("("+(len-z.avail_out)+")");
return(len-z.avail_out);
}