private final void fill() { if (this.sinks.isEmpty()) { return; } this.buf.clear(); this.inbound.get(this.buf); int off = 0; int end = this.buf.position(); ByteSink currentSink = this.sinks.removeFirst(); outer: while (off < end) { switch (currentSink.feed(this.buf.get(off))) { case ByteSink.FEED_ACCEPTED: off += 1; continue outer; case ByteSink.FEED_ACCEPTED_LAST: off += 1; break; case ByteSink.FEED_REJECTED: off += 0; break; } if (this.sinks.isEmpty()) { currentSink = null; break; } currentSink = this.sinks.removeFirst(); } if (currentSink != null) { this.sinks.addFirst(currentSink); } this.inbound.discard(off); }