什么是ByteBuf
数据在网络上是以字节流的形式进行传输的。Java官方的NIO提供了一个ByteBuffer类作为字节的容器。但是ByteBuffer的使用比较复杂,尤其是需要通过flip()方法对读写进行切换。因此netty重新设计了一个字节容器,即ByteBuf,没有了ByteBuf,Netty就失去了灵魂,其他所有的都将变得毫无意义。
ByteBuf与ByteBuffer的对比
Netty的ByteBuf采用了读写索引分离的策略(readerIndex与writerIndex),一个初始化(里面尚未有任何数据)的ByteBuf的readerIndex与writerIndex值都为0;
当读索引与写索引处于同一个位置时,如果继续读取,那么就会抛出IndexOutOfBoundsException;
对于ByteBuf的任何读写操作都会分别单独维护读索引与写索引。maxCapacity最大容量默认的限制时Integer.MAX_VALUE;