code: @Override
    public int read(char[] chr, int st, int len) throws IOException {
      try {
        beforeRead(len);
        int n = in.read(chr, st, len);
        afterRead(n);
        return n;
      } catch (IOException e) {
        handleIOException(e);
        return -1;
      }
    }
docs: Invokes the delegate's <code>read(char[], int, int)</code> method.
  @param chr the buffer to read the characters into
  @param st The start offset
  @param len The number of bytes to read
  @return the number of characters read or -1 if the end of stream
  @throws IOException if an I/O error occurs