Netty之ByteBuf详解

本文详细介绍了Netty中的ByteBuf结构,包括已丢弃、可读和可写字节三部分,以及读指针和写指针的角色。还讨论了capacity、maxCapacity、readableBytes和writableBytes等关键属性,以及相关的读写API和内存管理,特别是release()和retain()方法在管理堆外内存中的作用。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

非ban必选

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值