class CharacterReader {

    private void bufferUp() {
        final int pos = bufPos;
        if (pos < bufSplitPoint)
            return;

        try {
            reader.skip(pos);
            reader.mark(maxBufferLen);
            final int read = reader.read(charBuf);
            reader.reset();
            if (read != -1) {
                bufLength = read;
                readerPos += pos;
                bufPos = 0;
                bufMark = -1;
                bufSplitPoint = bufLength > readAheadLimit ? readAheadLimit : bufLength;
            }
        } catch (IOException e) {
            throw new UncheckedIOException(e);
        }
    }

    public  CharacterReader(Reader input, int sz);
    public  CharacterReader(Reader input);
    public  CharacterReader(String input);

}