/** * {@inheritDoc} */ @Override public void setReader(Reader reader) { super.setReader(reader); internalCodeReader = new CodeReader(reader, getConfiguration()); }
/** * {@inheritDoc} */ @Override public int read(char[] filteredBuffer, int offset, int length) throws IOException { if (internalCodeReader.peek() == -1) { return -1; } int initialOffset = offset; while (offset < filteredBuffer.length) { if (internalCodeReader.peek() == -1) { break; } boolean consumed = false; for (Channel<O> channel : channels) { if (channel.consume(internalCodeReader, getOutput())) { consumed = true; break; } } if ( !consumed) { int charRead = internalCodeReader.pop(); filteredBuffer[offset++] = (char) charRead; } } return offset - initialOffset; }