private void readDataChunk() throws SAXException, IOException {
        int count;

        // See if we have any overflow (filterCR sets for CR at end)
        if (readBufferOverflow > -1) {
            readBuffer[0] = (char) readBufferOverflow;
            readBufferOverflow = -1;
            readBufferPos = 1;
        } else {
            readBufferPos = 0;
        }

        try {
            count = reader.read(readBuffer, readBufferPos, READ_BUFFER_MAX
                    - readBufferPos);
        } catch (CharacterCodingException cce) {
            // 2006-04-25 hsivonen
            fatal("Input data does not conform to the input encoding. The input encoding was "
                    + characterEncoding + ".");
            return; // never happens
        }
        if ((characterHandler != null) && (count > 0)) {
            characterHandler.characters(readBuffer, readBufferPos, count);
        }
        if ((normalizationChecker != null) && (count > 0)) {
            normalizationChecker.characters(readBuffer, readBufferPos, count);
        }
        if (count < 0) {
            readBufferLength = readBufferPos;
        } else {
            readBufferLength = readBufferPos + count;
        }
        if (readBufferLength > 0) {
            filterCR(count >= 0);
        }
    }
Read a chunk of data from an external input source.
<p>
This is simply a front-end that fills the rawReadBuffer with bytes, then
calls the appropriate encoding handler.

@see #characterEncoding
@see #rawReadBuffer
@see #readBuffer
@see #filterCR
@see #copyUtf8ReadBuffer
@see #copyIso8859_1ReadBuffer
@see #copyUcs_2ReadBuffer
@see #copyUcs_4ReadBuffer
src/nu/validator/gnu/xml/aelfred2/XmlParser.java