ByteBuf是Netty框架里最重要的类之一,简单的说,ByteBuf就是java.nio.ByteBuffer的Netty版。
ByteBuf逻辑结构
正如类名所反映出来的,ByteBuf逻辑上就是一个byte容器。ByteBuf里的数据被两个指针划分为三个部分,如下图所示:

- reader index前面的数据是已经读过的数据,这些数据可以扔掉
- 从reader index开始,到writer index之前的数据是可读数据
- 从writer index开始,为可写区域
正是因为这样的设计,ByteBuf可以同时读写数据(只要可读区域和可写区域都还有空闲空间),而java.nio.ByteBuffer则必须调用flip()方法才能从写状态切换到读状态。
ByteBuf API
ByteBuf提供了大量的方法,比较常用的有下面这些:
- writeXxx(xxx value) 这组方法将不同类型的数据写到buf里,同时将writerIndex往前移适当的距离
- readXxx() 这组方法从buf里读出某种类型的数据,同时将readerIndex往前移适当的距离
- skipBytes(int length) 将readerIndex往前移指定的距离
- setXxx(int i

本文介绍了Netty框架中的ByteBuf类及其设计模式应用,包括ByteBuf的逻辑结构、API、ByteBufAllocator的抽象工厂模式、CompositeByteBuf的组合模式、ByteBufInputStream的适配器模式、ReadOnlyByteBuf的装饰器模式以及ByteBuf的各种工厂方法模式。通过对ByteBuf的深入理解,有助于提升Netty的使用效率。
最低0.47元/天 解锁文章
693

被折叠的 条评论
为什么被折叠?



