尚硅谷Netty系列学习笔记四《NIO核心组件之Buffer介绍》

前言:1.由于工作需要,需要学习下Netty框架,随对学习进行整理。方便后期的翻阅。大家也可以借鉴下。

           2.学习基于尚硅谷的Netty视频教程,笔记也会查阅其他资料来完善观看视频中本人理解模糊的地方。

Buffer是什么?干啥用的?

缓冲区:本质上是一个可以读写的内存块,可以理解为一个数据容器(数组)。
没有缓冲区以前,我们只能使用 输入输出流来读取和写入数据,(第二节的BIO中有示例)所以需要单独的线程监听输入输出流!以便及时处理数据流!
使用缓冲区之后,数据都会先到缓冲区临时存储,程序再从缓冲区中拿到数据处理!
举个例子:相当于家中的水管,开始只连接水厂和厨房,想要用水,必须得等水厂放水时才能用,但我不知道他啥时候放水,我得一直看着,来水了即时处理,要不数据来了,我没在的话 数据不就丢失了么。
如果我在家里搞一个蓄水池(缓冲区),水先到蓄水池里,我不需要一直盯着水龙头了,我只需要一段时间去看看蓄水池有水没有,有的话,赶紧处理!或者通过事件通知我,比如来水了,触发警报 嘀嘀嘀!我再来处理。因为水流到了储水池,所以这些数据还在!

Buffer中的几个重要变量

//标记 记住标记当前指针的位置 结合 reset 来重新回到当前标记的指针位置
private int mark = -1;
//指针 读或写时候的指针
private int position = 0;
//最大可操作大小 默认=容器大小 ,最大不能超过容器大小,可以通过设置limit来限制读写的范围
private int limit;
//容器大小 初始化时设置的多少,就是多少
private int capacity;

Buffer读写切换

Buffer既可以读数据也可以写数据!是读写双向的,但是必须通过调用 flip()方法 来切换 读写功能

代码示例

       //拿一个Buffer的子类 IntBuffer 举例  IntBuffer.allocate(5) 创建一个缓冲区 设置容量为5
        IntBuffer intBuffer = IntBuffer.allocate(5);
        //循环插入数据 intBuffer.capacity()为当前缓冲区容器的大小
        for (int i = 0; i < intBuffer.capacity(); i++) {
            //每put 一次 position指针会+1
            intBuffer.put(i);
        }
        //读写反转  position指针 会从5变为0
        intBuffer.flip();
        //循环读取数据 intBuffer.hasRemaining() 判断当前位置(position)和限制(limit)之间是否有任何元素。
        while (intBuffer.hasRemaining()) {
            //每次get一次 position指针会+1
            System.out.println(intBuffer.get());
        }

结果:

下一节:尚硅谷Netty系列学习笔记五《NIO核心组件之Channel》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值