netty in action fifth chapter Summary
2016-05-01 22:33
281 查看
这章介绍ByteBuf的使用
ByteBuf是ByteBuffer的改进版,添加了蛮多功能。
netty的Buf类使用引用计数,确定释放内存;使用池,使得内存处于安全级别。
ByteBuf 网络通信都是byte传输。它是最基础的buf类。
含有两个索引:readerIndex,writerIndex。
每当写入数据,writerIndex增加,每当读取数据,则readerIndex增大。不过readerIndex最大值就是writerIndex的值
heap Buffers 使用堆,使用数组。可方便申请和释放
direct Buffers 不使用堆,直接申请内存。当使用于socket通信时,是最佳的。原因是堆内存会先copy到直接内存,再传输。它不能用数组形式访问。假如你需要数组的操作,应该使用heap Buffers
composite buffer 复合缓冲 可将不同类型的ByteBuf对象组合在一起。有点像链表。使用hasArray,会返回false
ByteBuf能够任意访问,通过索引下标
是有序的,通过readerIndex和writerIndex访问
discardReadBytes()使得readerIndex变成0。作用是把已经读了的数据丢弃掉,让两个索引减少,使得writable bytes空间增大。
Readable bytes buffer.readByte获取所有的数组
调用clear()方法,将两个索引都置为0
查找方法 indexOf()
有一个ByteBufProcessor接口,用于复杂的查找行为
提供了mark和reset方法。mark记录读或写的位置,reset可重置到mark的位置。
derived buffers 派生buffer,调用duplicate,slice(),readOnly(),order(),它有独立的读写索引和mark索引。其他的共享原来的数据。
需要一份拷贝的数据,就要用copy()
get和set开头的方法,都不会移动读写索引,
read和write开头的方法,会移动读写索引
ByteBufHolder 辅助类,当要一个消息体有效负载于一个ByteBuf,使用它比较好。提供了data(),copy()方法等。
这个没看懂。实际应用时再了解吧。
为更方便使用,推出了util类
ByteBufAllocator 帮助获得ByteBuf的实例。提供了获取多种ByteBuf类型的方法。
获取ByteBufAllocator,使用Channel的alloc()方法获取。
它有两种实现,一种是使用池分配和释放,一种是每次新建ByteBuf。默认是PoolByteBufAllocator
Unpooled也是缓冲区实现类,查看文档吧
ByteBufUtil 提供了众多静态方法。不管对象是使用pool还是不用。
其中hexdump()比较有用,能够以16进制打印字节数据。也提供了判相等函数。
发现一个中文版翻译。
/article/1376654.html
不过我打算继续看英文版的。原因是某些关键部分更好理解。看不懂的地方就对照着中文版看。
ByteBuf是ByteBuffer的改进版,添加了蛮多功能。
netty的Buf类使用引用计数,确定释放内存;使用池,使得内存处于安全级别。
ByteBuf 网络通信都是byte传输。它是最基础的buf类。
含有两个索引:readerIndex,writerIndex。
每当写入数据,writerIndex增加,每当读取数据,则readerIndex增大。不过readerIndex最大值就是writerIndex的值
heap Buffers 使用堆,使用数组。可方便申请和释放
direct Buffers 不使用堆,直接申请内存。当使用于socket通信时,是最佳的。原因是堆内存会先copy到直接内存,再传输。它不能用数组形式访问。假如你需要数组的操作,应该使用heap Buffers
composite buffer 复合缓冲 可将不同类型的ByteBuf对象组合在一起。有点像链表。使用hasArray,会返回false
ByteBuf能够任意访问,通过索引下标
是有序的,通过readerIndex和writerIndex访问
discardReadBytes()使得readerIndex变成0。作用是把已经读了的数据丢弃掉,让两个索引减少,使得writable bytes空间增大。
Readable bytes buffer.readByte获取所有的数组
调用clear()方法,将两个索引都置为0
查找方法 indexOf()
有一个ByteBufProcessor接口,用于复杂的查找行为
提供了mark和reset方法。mark记录读或写的位置,reset可重置到mark的位置。
derived buffers 派生buffer,调用duplicate,slice(),readOnly(),order(),它有独立的读写索引和mark索引。其他的共享原来的数据。
需要一份拷贝的数据,就要用copy()
get和set开头的方法,都不会移动读写索引,
read和write开头的方法,会移动读写索引
ByteBufHolder 辅助类,当要一个消息体有效负载于一个ByteBuf,使用它比较好。提供了data(),copy()方法等。
这个没看懂。实际应用时再了解吧。
为更方便使用,推出了util类
ByteBufAllocator 帮助获得ByteBuf的实例。提供了获取多种ByteBuf类型的方法。
获取ByteBufAllocator,使用Channel的alloc()方法获取。
它有两种实现,一种是使用池分配和释放,一种是每次新建ByteBuf。默认是PoolByteBufAllocator
Unpooled也是缓冲区实现类,查看文档吧
ByteBufUtil 提供了众多静态方法。不管对象是使用pool还是不用。
其中hexdump()比较有用,能够以16进制打印字节数据。也提供了判相等函数。
发现一个中文版翻译。
/article/1376654.html
不过我打算继续看英文版的。原因是某些关键部分更好理解。看不懂的地方就对照着中文版看。
相关文章推荐
- MySQL索引原理及慢查询优化
- Java动态模型系统OSGi实战讲解
- folly->set_sorted_vector
- leetcode之-题34
- iOS之tableView(五)的编辑删除插入操作和UIAlertController的使用
- STL算法_heap算法篇
- Android面试题——Java面向对象思想
- Problem E: 输入两个整数,进行四则运算并输出结果
- ubuntu 安装 jdk+myeclipse
- splite3 简单2片
- MapReduce Intro
- MIT 6.828 学习笔记4 Lab2实验报告
- javascript实现n阶乘的2个方法
- 网球训练
- opencv文件读写(二)使用多种方式及用法
- 成功在家用ssh远程连上了学校电脑虚拟机当中的ubuntu(代价是虚拟机全部黑屏只能用SSH连接了!)
- iOS之短信,邮件,通信录技术的完美实现
- Vb生成一定范围内的随机数(含小数部分)
- python zip 生成字典
- 合并k个有序链表