Java NIO 学习(二)--Buffer

在第一节中,简单的描述了NIO三个核心的类:channel、buffer、selector;由于缓冲区作为操作的基本,而且底层channel接口没有过多细节(只有两个方法:isOpen、close)这里先讲解缓冲区的详细内容,后面再讲解具体类型的channel和selector;
摘要由CSDN通过智能技术生成

在第一节中,简单的描述了NIO三个核心的类:channel、buffer、selector;由于缓冲区作为操作的基本,而且底层channel接口没有过多细节(只有两个方法:isOpen、close)这里先讲解缓冲区的详细内容,后面再讲解具体类型的channel和selector;

一、buffer内部细节

在上一节的简单实例中有讲到,缓冲区的读模式和写模式,为什么还会有这样来区分呢?缓冲区可以认为是一个容器,可以看做是某个类型的数组,既然是容器、数组那就应该有容量大小、下标(index),不可能无限读或者写,读写时必须有指定的下标值;

缓存区的读写模式内部其实是使用三个状态变量来控制:
- capacity
- position
- limit

(一)、状态变量
  1. capacity

这个状态变量表示缓冲区的容量大小,这个值是固定不变的,指向缓冲区底层数组的最后一个位置;
2. position

在读模式下,该值表示下一个读取数据的位置,通过flip方法切换为读模式时,该值为指向缓存区第一个数据位置;在写模式下,该值表示下一个要写入数据的位置,通过clear方法切换为写模式时,该值指向缓存区第一个数据位置;
3. limit

这个状态变量表示缓存区可读/写的最大位置:在写模式下,该值等于capacity;在读模式下,该值等于切换为读模式时position的位置,表示可读数据位置;

(二)、读写模式改变方法
  1. flip方法

改方法必须要在读取缓冲区数据前调用;flip方法将limit变量的位置设置为当前position,将position设置为0,然后就可从缓冲区读取数据;
2. clear方法

该方法必须在向缓冲区写入数据前调用;clear方法将limit变量设置为和capacity一样,将position设置为0;
3. compact方法

该方法可以作为切换写模式调用,它并不像clear方法清空整个缓冲区,只是清除已经读取过的数据,没有被读取过的数据会移动到缓冲区前面:position位置设置为 limit-position,而limit还是设置为和capacity一样;
4. rewi

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值