网络数据的基本字节总是字节.Java NIO提供了ByteBuffer作为它的字节容器,但这个类用起来有点复杂.
Netty用ByteBuf代替了ByteBuffer,下面介绍ByteBuf:
ByteBuf维护了两个不同的索引:readerIndex用于读取,writerIndex用于写入.当你从ByteBuf读取时,readerIndex将会递增已经被读取的字节数,同样当你写入ByteBuf时,writerIndex也会被递增.
1,capacity():ByteBuf 的容量
2,getByte(i):访问索引i上的字节.
3,ByteBuf具有两个索引,但JDK的ByteBuf只有一个索引,所以它需要调用filp()在读和写模式之间切换.
ByteBuf的两个索引将ByteBuf划分为三个区域:
1>,可丢弃字节:
调用discardReadBytes()方法,可以丢弃它们并回收空间.调用之后,readerIndex=0,writerIndex也相应的减少相同的大小,可写字节变大.
2>,可读字节:
使用readByte()读取字节.readerIndex增加.
使用getByte()读取字节,readerIndex不变.
3>,可写字节:
使用writeByte()写入字节.writerIndex增加.
使用setByte()读取字节,writerIndex不变.
4,使用markReaderIndex(),markWriterIndex(),resetReaderIndex,resetWriterIndex()来标记和重置readerIndex和writerIndex.
5,使用readerIndex(int)和writerIndex(int)将索引移动到指定的位置.
6,使用clear()将readerIndex和writerIndex都设置为0.这并不会清楚内存中的内容.和JDK的ByteBuffer的clear()一样.
7.查找指定值的索引:indexOf() 和 forEachByte(ByteBufProcessor.FIND_NUL)
8,派生缓冲区:为ByteBuf提供了以专门的方法来呈现其内容的视图.
duplicate();
slice();
slice(int,int);
Unpooled.unmodiiableBuffer();
order(Byteorder);
readSlice(int).
这些方法都会返回一个新的ByteBuf实例.但存储是共享的,修改视图内容,源实例内容也会改变.