您的位置:首页 > 其它

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

不过我打算继续看英文版的。原因是某些关键部分更好理解。看不懂的地方就对照着中文版看。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: