nio ByteBuffer和netty ByteBuf

Java NIO ByteBuffer与Netty ByteBuf对比分析
本文探讨了Java NIO ByteBuffer的固定大小限制及其手动管理指针带来的问题,强调了其在复用和扩展性上的不足。同时,介绍了Netty的ByteBuf,它使用双指针策略提高了读写效率,并支持动态管理已读和未读区域,通过discardReadBytes操作优化内存使用。

1、nio ByteBuffer的缺陷
ByteBuffer是Java NIO原生搞的,就是搞一个数据缓冲区,把数据弄到缓冲区里操作也是针对缓冲区来的,这块缓冲区内存是可以复用的,下次有数据来的时候,复用他就可以了,不要老是搞频繁回收的短期对象

ByteBuffer数据长度是固定的,一旦分配,就不能动态扩容和收缩,所以在复用的时候,如果要是超出这个范围了,就没法复用了,而且他只有一个标识位置的指针,每次读写,都要手工调整指针位置,非常的麻烦,一旦程序没写好,直接会导致数据错乱的问题,对于一些高级特性还得扩展实现才行

2、netty ByteBuf读写指针原理分析
两个指针,readerIndex和writerIndex,,刚开始都是0,capacity是可以写入的字节数量,写入数据以后,writerIndex增加n个字节,此时可读取的数据就是readerIndex到writerIndex,剩余可以写入的就是writerIndex到capacity

读取m个字节后,readerIndex会增加m个字节,这个时候0到readerIndex就被锁住了,没法读写,readerIndex是不能超过writerIndex的,有一个discardReadBytes的操作,释放掉0到readerIndex的空间,让readerIndex归零

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值