JDK的ByteBuffer与Netty的ByteBuf之间的差异对比

JDK的ByteBuffer与Netty的ByteBuf之间的差异对比:
Netty的ByteBuf采用了读写索引分离的策略(readerIndex与writerIndex),一个初始化(里面尚未有任何数据)的ByteBuf的readerIndex与writerIndex值都为0。
当读索引与写索引处于同一个位置时,如果继续读取,那么就会抛出IndexOutOfBoundsException。
对于ByteBuf的任何读写操作都会分别单独维护读索引与写索引。maxCapacity最大容量默认的限制时Integer.MAX_VALUE。
JDK的ByteBuffer的缺点:
final byte[] hb; // Non-null only for heap buffers
这是JDK的ByteBuffer对象中用于存储数据的对象声明;可以看到,其字节数组是被声明为final的,也就是长度时固定不变的。一旦分配好之后不能动态扩容与收缩;而且当待存储的数据字节很大时就很有可能出现IndexOutOfBoundsException。如果要预防这个异常,那就需要在存储之前完全确定好待存储的字节大小。如果ByteBuffer的空间不足,我们只有一种解决方案:创建一个全新的ByteBuffer对象,然后再将之前的ByteBuffer的数据复制过去,这一切操作都需要由开发者自己来手动完成。
ByteBuffer只使用一个position指针来标识位置信息,在进行读写切换时就绪啊唷调用flip方法或是rewind方法,使用起来很不方便。
Netty的ByteBuf的优点:
存储字节的数组时动态的,其最大值默认是Integer.MAX_VALUE。这里的动态性时体现在write方法中的,write方法在执行时会判断buffer容量,如果不足则自动扩容。
ByteBuf的读写索引是完全分开的,使用起来更加方便。

 

转载自:https://blog.csdn.net/superbeyone/article/details/85771296#JDKByteBuffer_9

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值