private Byte getNextByte() {
        final Byte suppliedByte;
        if (unConsumedBytes.isEmpty()) {
            suppliedByte = byteSupplier.get();
        } else {
            // We have some unconsumed bytes from a previous call to decodeNextChar so
            // use them first
            suppliedByte = unConsumedBytes.pop();
        }

        if (suppliedByte == null) {
            // end of stream
            isEndOfStream = true;
        } else {
            isEndOfStream = false;
            lastSuppliedByteOffset++;
        }
        return suppliedByte;
    }
@param charset
@param mode
@param byteSupplier A supplier of consecutive bytes, e.g. from a byte stream. This will be called
                    one or more times (up to a maximum of MAX_BYTES_PER_CHAR) until a 'char' can be
                    decoded from the bytes supplied.
stroom-pipeline/src/main/java/stroom/pipeline/reader/ByteStreamDecoder.java