private int read1(byte[] cbuf, int off, int len) throws IOException {
        if (nextChar >= nChars) {
            /* If the requested length is at least as large as the buffer 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 >= charBuffer.length && !skipLF) {
                actualFilePointer = null;
                return raf.read(cbuf, off, len);
            }
            fill();
        }
        if (nextChar >= nChars) {
            return -1;
        }
        if (skipLF) {
            skipLF = false;
            if (charBuffer[nextChar] == '\n') {
                nextChar++;
                if (nextChar >= nChars) {
                    fill();
                }
                if (nextChar >= nChars) {
                    return -1;
                }
            }
        }
        int n = Math.min(len, nChars - nextChar);
        for (int i = 0; i < n; i++) {
            cbuf[off + i] = (byte) charBuffer[nextChar + i];
        }
        //System.arraycopy(charBuffer, nextChar, cbuf, off, n);
        nextChar += n;
        actualFilePointer += n;
        return n;
    }