ByteBuf的结构,如下图所示
1.ByteBuf是一个字节容器,容器里面的数据分为三部分,第一部分是已经丢弃的字节,这部分数据是无效的;第二部分是可读字节,这部分数据是ByteBuf的主体数据,从ByteBuf里读取的数据都来自这一部分;最后一部分的数据是可写字节,所有写到ByteBuf的数据都会写到这一段。后面的虚线部分表示该ByteBuf最多还能扩容多少容量。
2.以上三部分内容是被两个指针划分出来的,从左到右依次是读指针(readerIndex)和写指(writerIndex)。还有一个变量capacity,表示ByteBuf底层内存的总容量。
3.从ByteBuf中每读取一字节,readerIndex自增1,ByteBuf里总共有writerIndex-readerIndex字节可读。由此可以知道,当readerIndex与writerIndex相等的时候,ByteBuf不可读。
4.写数据是从writerIndex指向的部分开始写的,每写一字节,writerIndex自增1,直到增到capacity。这个时候,表示ByteBuf已经不可写。
5.ByteBuf里其实还有一个参数maxCapacity。当向ByteBuf写数据的时候,如果容量不足,则可以进行扩容,直到capacity扩容到maxCapacity,超过maxCapacity就会报错
容量相关API