mReadBuffer.clear();
        public void read(ByteBuffer rbb) throws IOException {            rbb.flip();            int filterChangeId = mFilterChangeId.get();            // We may have read more than one PDU             while (rbb.hasRemaining()) {                if (mMatcher == null)                	break;            	                ByteBuffer pdu = rbb.duplicate();                int initialPosition = rbb.position();                                boolean matched = false;                                matched = mMatcher.match(rbb);                                if (mDebug) mLog.debug("plain filter: match returned " + matched);                                if (!matched) {                    rbb.position(initialPosition);                    break;                }                                    pdu.position(initialPosition);                pdu.limit(rbb.position());                //if (mTrace) mLog.trace(OzUtil.byteBufferDebugDump("plain filter: input matched", pdu, false));                mConnectionHandler.handleInput(pdu, true);                // The earlier call might have resulted in a filter being added                // to the stack. Check for that condition and bubble back up and                // refilter whatever else remains in the buffer throug the new                // filter.                if (mFilterChangeId.get() != filterChangeId) {                    mLog.info("plain filter: filter stack has changed");                    mReadBuffer.clear();                    return;                }            }                        // Just spill all the unmatched stuff to the handler            if (rbb.hasRemaining()) {                //if (mTrace) mLog.trace(OzUtil.byteBufferDebugDump("plain filter: input unmatched", rbb, false));                mConnectionHandler.handleInput(rbb, false);                // automatically enable read interest in the case                // where match was not found.                enableReadInterest();            }                        rbb.clear();        }