您的位置:首页 > 其它

Netty ByteBuf

2017-07-01 12:04 218 查看
网络数据的基本字节总是字节.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实例.但存储是共享的,修改视图内容,源实例内容也会改变.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: