netty学习之ChannelBuffer

    这个类的学习其实我感觉看ChannelBuffer的javadoc就能明白大概,也就是网上说的有readerIndex和writerIndex,以及和这两个相关的
markedReaderIndex和markedWriterIndex,我这里重点看一下discardReadBytes
这个函数的实现吧:

public void discardReadBytes() {
        if (readerIndex == 0) {
            return;
        }
        setBytes(0, this, readerIndex, writerIndex - readerIndex);
        writerIndex -= readerIndex;
        markedReaderIndex = Math.max(markedReaderIndex - readerIndex, 0);
        markedWriterIndex = Math.max(markedWriterIndex - readerIndex, 0);
        readerIndex = 0;
    }


     其实就是将readIndex到writerIndex之间length为writerIndex减去readerIndex的byte拷贝到从0去,这样数据就拷贝过去了。然后变更写指针,因为readerIndex到writerIndex直接的空间就被腾出来了,变更写指针到之前的读指针的位置上。然后解决markedReaderIndex和markedWriterIndex这两个指针的位置,最后将readerIndex设置为0.其他的方法理解起来都比较好理解一些。
      ChannelBufferIndexFinder这个接口比较特殊,感觉就是查找是否已经到了某些特殊字符了,比如\r和\n等等,这个对消息的截取等比较有帮助。
      ChannelBufferOutputStream类是将对BufferChannel封装成一个OutputStream,同样的
也有ChannelBufferInputStream类。

你可能感兴趣的:(netty,netty源码分析,ChannelBuffer)