Nio-slice方法解决替代忘记写flip方法的作用

filp,slice,和duplicate

  • filp: 英文翻译为反转
  • slice: 切片

filp 用于切换 读写模式 . 创建Buffer时是写入模式,读取时需要切换才能进行读取. 切换时主要变更 Buffer的position和limit.

public class Test {
    public static void main(String[] args) {
        ByteBuffer allocate = ByteBuffer.allocate(16);
        allocate.putInt(1);
        allocate.flip();
        System.out.println(allocate.getInt());

    }
}

 

slice 创建一个Buffer , 共享 父Buffer 的内容, 在 slice 中的修改会直接反馈在 父Buffer中, Position,Limit,capacity 相互独立.

主要在不切换父Buffer时使用 , 在  RocketMq 中出现该使用方式
public class SliceTest {
    public static void main(String[] args) {
        ByteBuffer allocate = ByteBuffer.allocate(16);
        //切片1
        ByteBuffer slice = allocate.slice();
        slice.position(0);
        slice.putInt(1);
        //切片2
        ByteBuffer two = allocate.slice();
        two.position(4);
        two.putInt(2);
        System.out.println(allocate.getInt());//输出1
        System.out.println(allocate.getInt());//输出2
    }
}

 创建的ByteBuffer没有直接使用,而是通过共享的slice去进行修改,slice的修改会直接反馈在allocate的内容当中,省去了 filp . 避免了忘记 filp 的错误.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值