@Override public void processDataStream(final InputStream chainInputStream, final OutputPort<IMonitoringRecord> outputPort) throws IOException { final BinaryValueDeserializer deserializer = BinaryValueDeserializer.create(this.buffer , this.registry); boolean endOfStreamReached = false; while (!endOfStreamReached) { byte[] bytes = this.buffer.array(); int bytesRead = chainInputStream.read(bytes, this.buffer.position(), this.buffer.remaining()); this.buffer.position(this.buffer.position() + bytesRead); while (bytesRead > 0) { bytes = this.buffer.array(); bytesRead = chainInputStream.read(bytes, this.buffer.position(), this.buffer.remaining()); if (bytesRead >= 0) { this.buffer.position(this.buffer.position() + bytesRead); } } if (bytesRead == -1) { endOfStreamReached = true; } this.processBuffer(deserializer, outputPort); if (endOfStreamReached) { chainInputStream.close(); } } }