code: public int read(byte[] b, int off, int len) throws IOException {
  		ensureOpen();
  		if ((off | len | (off + len) | (b.length - (off + len))) < 0) {
  			throw new IndexOutOfBoundsException();
  		} else if (len == 0) {
  			return 0;
  		}
  		try {
  			int n;
  			while ((n = inf.inflate(b, off, len)) == 0) {
  				if (inf.finished() || inf.needsDictionary()) {
  					reachEOF = true;
  					return -1;
  				}
  				if (inf.needsInput()) {
  					fill();
  				}
  			}
  			return n;
  		} catch (DataFormatException e) {
  			String s = e.getMessage();
  			throw new ZipException(s != null ? s : "Invalid ZLIB data format");
  		}
  	}
docs: Reads uncompressed data into an array of bytes. This method will block
  until some input can be decompressed.
  
  @param b
  the buffer into which the data is read
  @param off
  the start offset of the data
  @param len
  the maximum number of bytes read
  @return the actual number of bytes read, or -1 if the end of the
  compressed input is reached or a preset dictionary is needed
  @exception ZipException
  if a ZIP format error has occurred
  @exception IOException
  if an I/O error has occurred