Netty 的主要组件
ByteBuf 组件 当我们进行数据传输的时候,往往需要使用到缓冲区,常用的缓冲区就是 JDK NIO类库 提供的 Buffer组件,7 种基本数据类型 ( Boolean 除外 ) 都有自己的缓冲区实现。对于 NIO编程 而言,我们主要使用的是 ByteBuffer。从功能角度而言,ByteBuffer 完全可以满足 NIO编程 的需 要,但是由于 NIO编程 的复杂性,ByteBuffer 也有其局限性,它的主要缺点如下。 ByteBuffer 长度固定,一旦分配完成,它的容量不能动态扩展和收缩,当需要编码的 POJO对象 大于 ByteBuffer 的容量时,会发生索引越界异常; ByteBuffer 只有一个标识位置的 指针position,读写的时候需要手工调用 flip() 和 rewind() 等,使用者必须小心谨慎地处理这些 API,否则很容易导致程序处理失败; ByteBuffer 的 API 功能有限,一些高级和实用的特性它不支持,需要使用者自己编程实现。 为了弥补这些不足,Netty 提供了自己的 ByteBuffer实现,即 ByteBuf, 下面我们看一下 ByteBuf 的原理和主要功能。 ByteBuf 工作原理 首先,ByteBuf 依然是个 Byte数组 的缓冲区,它的基本功能应该与 JDK 的 ByteBuffer 一致,提供以下几类基本功能。