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实例.但存储是共享的,修改视图内容,源实例内容也会改变.
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实例.但存储是共享的,修改视图内容,源实例内容也会改变.
相关文章推荐
- 一起学Netty(五)之 初识ByteBuf和ByteBuf的常用API
- Netty学习之旅----ByteBuf内部结构与API学习
- Netty中ByteBuf对象的创建方式对内存的影响
- Netty - ByteBuf (3)
- Netty in Action (十二) 第五章节 第一部分 简介ByteBuf
- Netty ByteBuf 释放注意事项
- Netty in Action (十三) 第五章节 第二部分 ByteBuf字节层面的操作
- Netty学习之旅------源码分析Netty线程本地分配机制与PooledByteBuf线程级对象池原理分析
- 对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解
- netty, ByteBuf 转 String
- Netty in Action (十四) 第五章节 第三部分 ByteBufHolder,ByteBuf分配,计数引用
- Netty之实现自定义简单的编解码器二(MessageToMessageEncoder<CharSequence>和MessageToMessageDecoder<ByteBuf>)
- netty学习之二:ByteBuf解读
- netty, ByteBuf 转 String
- netty源码分析系列——ByteBuf&UnpooledByteBuf
- Netty - ByteBuf (2)
- netty5源码探索(一)----ByteBuf初探
- netty 入门二 (传输bytebuf 或者pojo)
- Netty笔记--ByteBuf释放
- Netty bytebuf 源码解析