private final void fill() {
        if (this.sinks.isEmpty()) {
            return;
        }

        ByteSink currentSink = this.sinks.removeFirst();

        while (currentSink != null && inbound.hasData()) {
            switch (currentSink.feed(inbound.read())) {
                case ByteSink.FEED_ACCEPTED:
                    continue; // continue to next feed

                case ByteSink.FEED_ACCEPTED_LAST:
                    break; // break out switch, not while

                case ByteSink.FEED_REJECTED:
                    break; // break out switch, not while
            }

            if (this.sinks.isEmpty()) {
                currentSink = null;
                break;
            }

            currentSink = this.sinks.removeFirst();
        }

        if (currentSink != null) {
            this.sinks.addFirst(currentSink);
        }

    }