Netty的深入浅出--25.NIO深入详解与体系分析

本文深入探讨Java NIO中Buffer的运作原理,包括其核心属性capacity、limit与position的解释,以及clear、flip和rewind等操作的影响。通过实例演示buffer在读写操作中的状态变化,强调了mark与reset功能的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

nio实例:

NIO数据传输流程图 

IO与NIO的区别:

 编写第二个实例:

编写第三个实例:

 源码中提到,对于buffer来说最重要的是三个属性:capacity、limit、position

capacity:简单来说就是表示存储元素的容量,一定确定不能更改

 

调用了.allocate(10),也就是说该buffer中只能存放10个元素

 

limit:指向索引的第一个元素,而且不能被读和写

 

 position:指向于下一个元素,能够读和写

读操作的时候:

写操作: 

 

 这句话说明了,没有Boolean类型的buffer

对于buffer的操作我们有两种:

第一种:相对操作,就是我们之前使用没有指定读写索引的那种;

第二种:绝对操作,指定读写索引的那种。

 

标记mark,也就是当position读取到某个位置的时候,进行mark标记,这样的话,如果position读到后面又想回来的时候reset重置就可以回到mark的位置

 

4个属性之间的关系:0<=mark<=position<=limit<=capacity

 

对于buffer的三个操作:

clear:将limit设置为capacity,将position设置为0,相当于clear操作就是将buffer恢复成初始化状态

 

 flip:将limit设置为当前postion位置,将position设置为0,然后重头开始读和写

rewind:limit不变,position设置为0.相当于在已读的基础上重头开始读。

 

 buffer并不是一个线程安全的,如果需要线程安全需要自己设置

 buffer的链式调用:

检验一下之前的结论是否正确:

 

 

 这里说明一下clear,该方法本身不会清除数据,只是重置了两个属性的位置,回到初始化设置,所以基本上要和read()方法配合使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值