netty的byteBuf

1.byteBuf是什么
byteBuf是netty对nio的byteBuffer的现实,因为byteBuff使用场景有限

2.byteBuf类关系图

3.为什么netty要用bytebuf来替换bytebuffer
1.使用readIndex和writeIndex来解决每次读写时需要进行flip操作的问题
简化了读写的操作,读有读的指针,写有写的指针,互补干扰
2.封装了每次put需要进行可写空间的检测,以及超出可写空间的异常
用户无需去写多余的检测,并且netty会根据写入内容大小自动扩容
3.提供了不同场景下使用堆内存和直接内存的方式来提高效率
4.提供了更多方便的api

3.byteBuf能做什么
headByteBuf:堆内存,可以快速创建和回收,需要多一次数据的复制(到jvm中)
directByteBuf:直接内存,效率高,分配和回收效率慢

java本身的buteBuffer已经可以实现以下操作:
7种buffer的读写、缓冲区的创建、本身的copy和slice、设置网络字节序、操作数据位置指针

netty如何封装:
首先介绍byteBuf的几个关键元素
readIndex:读的位置
writeIndex:写的位置
capocity:缓冲区大小
discardable bytes:已经完成编解码的空间,用于在write时自动扩容
readable bytes:可读空间大小,超出这个缓存空间会抛异常
writable bytes:可写空间大小,查出会利用discardable bytes的空间进行扩容,后面会具体介绍

4.AbstractByteBuf能做什么
maxcapacity:最大容量
markReaderIndex:标记回滚的读指针
markWriterIndex:标记回滚的写指针
SwappedByteBuf:与本 ByteBuf 大小端属性相反的 ByteBuf

有效性检查,如果引用计数 refCnt 为 0,表示该 ByteBuf 已经被回收,不能再写入。
输入参数有效性检查:要写入的数据量不能小于 0,写入之后总数据量也不能大于最大容量。
当容量不足时,如果尚未超过最大容量,则进行扩容。
修改写指针。

public ByteBuf writeBytes(byte[] src, int srcIndex, in
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值