NIO Buffer缓冲区的duplicate与slice区别

9 篇文章 0 订阅

duplicate

英文翻译过来是复制的意思,根据源码,调用duplicate方法返回的Buffer对象就是复制了一份原始缓冲区,复制了position、limit、capacity这些属性,但是,复制后的缓冲区get和put所操作的数组还是与原始缓冲区一样的,所以对复制后的缓冲区进行修改也会修改原始的缓冲区,反之亦然。

 

slice

如下图所示

英文翻译后是切片、划分的意思。。。调用该方法得到的新缓冲区所操作的数组还是原始缓冲区中的那个数组,不过,通过slice创建的新缓冲区只能操作原始缓冲区中数组剩余的数据,即索引为调用slice方法时原始缓冲区的position到limit索引之间的数据,超出这个范围的数据通过slice创建的新缓冲区无法操作到。

像上图中右下角的就是slice buffer,它操作的数组0、1、2三个索引的加上offset偏移量就是原始数组中的3、4、5了,在执行get或者put时,都会加上offset。。然后创建slice buffer时limit和capcity都会被限制为原始缓冲区的remainning的返回值,offset被设置比为原始position的值,所以slice buffer调用clear和flip之类的方法都不会导致操作越界。。

看源码:

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值