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

被折叠的 条评论
为什么被折叠?



