netty学习之----ByteBuf

本文介绍了Netty中ByteBuf类的使用方式及其与ByteBuffer的区别。ByteBuf通过readerIndex和writerIndex来标记读写位置,支持直接缓存区和堆缓存区,并提供了派生缓冲区的功能。此外还介绍了ByteBufAllocator接口及其实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

    java jdk1.4中引入了nio后,ByteBuffer工具类也包含其中,这个工具类使用起来不太方便,因为从写状态变成读状态或者从读状态变成写状态需要调用flip()方法进行切换。而在Netty中对改工具进行了扩展---ByteBuf类,这个类中有三个下标来记录读写状态,分别为readerIndex、writerIndex和capacity。


    readerIndex:表示读位置游标

    writerIndex:表示写位置游标

    capacity:表示数组容量

    ByteBuf分为直接缓存区、堆缓冲区和混合缓存区,堆缓存区Heap是指二进制数组直接存储在jvm的堆内存中,读和写速度快,内存回收也快;直接缓冲区Direct是指将二进制数组存在堆内存外的区域,读写较慢,空间回收慢。但是ByteBuf数据如果需要通过网络进行传输,那么使用直接缓存区更快,因为堆缓存区的数据要发到网络中也需要先复制到直接缓存区后在flush到网络中。

    派生缓冲区,可以调用ByteBuf对象的duplicate和slice等方法,这些方法能够返回一个新的ByteBuf实例,新实例的readerIndex、writerIndex是独立的,但是数组存储是共享的

    ByteBuf和ByteBufHolder

    按需分配类:ByteBufAllocator,这个接口有两个实现类:PooledByteBufAllocator、UnpooledByBufAllocator

    非池化ByteBuf:Unpooled。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值