code: @Override
  	public int read(char[] cbuf, int off, int len) throws IOException {
  		try {
  			if (closed) {
  				throw new IOException("Attempt to read from a closed stream"); //$NON-NLS-1$
  			}
  			if (eof) {
  				return -1;
  			}
  			if (curr == null) {
  				curr = getNextInputReader();
  				if (curr == null) {
  					eof = true;
  					return -1;
  				}
  			}
  			int size, bytesRead = 0, bytesToRead = len;
  			while (!eof && bytesRead < bytesToRead) {
  				size = curr
  						.read(cbuf, off + bytesRead, bytesToRead - bytesRead);
  				if (size == -1) {
  					curr.close();
  					curr = getNextInputReader();
  					if (curr == null) {
  						eof = true;
  					}
  				} else {
  					bytesRead += size;
  				}
  			}
  			return bytesRead;
  		} catch (IOException e) {
  			throw e;
  		} catch (Exception e) {
  			throw new IOException(e);
  		}
  	}
docs: /*
  (non-Javadoc)
  
  @see java.io.Reader#read(char[], int, int)