private int read1(char[] cbuf, int off, int len) throws IOException {
	if (nextChar >= nChars) {
	    /* If the requested length is at least as large as the buffer, and
	       if there is no mark/reset activity, and if line feeds are not
	       being skipped, do not bother to copy the characters into the
	       local buffer.  In this way buffered streams will cascade
	       harmlessly. */
	    if (len >= cb.length && markedChar <= UNMARKED && !skipLF) {
		return in.read(cbuf, off, len);
	    }
	    fill();
	}
	if (nextChar >= nChars) return -1;
	if (skipLF) {
	    skipLF = false;
	    if (cb[nextChar] == '\n') {
		nextChar++;
		if (nextChar >= nChars)
		    fill();
		if (nextChar >= nChars)
		    return -1;
	    }
	}
	int n = Math.min(len, nChars - nextChar);
	System.arraycopy(cb, nextChar, cbuf, off, n);
	nextChar += n;
	return n;
    }