code: public int read( char cbuf[], int off, int len ) {
          if ( (off < 0) || (off > cbuf.length) || (len < 0) ||
                  ((off + len) > cbuf.length) || ((off + len) < 0) ) {
              throw new IndexOutOfBoundsException();
          } else if ( len == 0 ) {
              return 0;
          }
          if ( next >= length ) {
              return -1;
          }
          int n = Math.min( length - next, len );
          in.getChars( next, next + n, cbuf, off );
          next += n;
          return n;
      }
docs: Reads characters into a portion of an array.
  
  @param cbuf Destination buffer
  @param off Offset at which to start writing characters
  @param len Maximum number of characters to read
  @return The number of characters read, or -1 if the end of the
  stream has been reached