public void advance() {
        if (link.isEmpty()) {
            return;
        }
        int len = nextAdvance;
        ByteBuffer bb;
        while (true) {
            bb = link.getFirst();
            if (len < bb.remaining()) {
                bb.position(bb.position() + len);
                break;
            }
            len -= bb.remaining();
            bb.position(bb.position() + bb.remaining());
            if (!removeFirstLink(bb)) {
                break;
            }
        }
        incrReadByteCount(nextAdvance);
        nextAdvance = 0;
    }