NIO中buffer常用方法学习笔记

NIO中buffer常用方法学习笔记

	NIO:Non-block I/O 非阻塞IO
	非阻塞IO的读写一般是通过缓冲区(buffer)来实现的,下面对buffer的一些常用属性和方法简单的记录一下。
	重要属性:
		mark:标记--用于标记position的位置
		position:记录下一次要操作的位置
		limit:可操作数据的上限
		capacity:缓冲区容量
		属性之间关系:0<=mark<=position<=limit<=capacity
	下面通过几张图讲解下buffer的几个方法(以bytebuffer)为例:
        //1.分配一个大小为10的缓冲区	
		ByteBuffer buf = ByteBuffer.allocate(10);
		此时缓冲区状态如下图:
			![在这里插入图片描述](https://img-blog.csdnimg.cn/201904072141345.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzM1NzYz,size_16,color_FFFFFF,t_70)
		//2.存入数据到缓冲区
		String str = "hello";
		buf.put(str.getBytes());
		此时缓冲区状态如下:
			![在这里插入图片描述](https://img-blog.csdnimg.cn/20190407214650432.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzM1NzYz,size_16,color_FFFFFF,t_70)
	//3.步骤2中执行put是执行缓冲区的写模式,此时要转换到读模式需调用flip()方法
	buf.flip();
	此时缓冲区状态如下:
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190407215136748.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzM1NzYz,size_16,color_FFFFFF,t_70)
	此时position回到缓冲器开始位置,limit变为5,此时读模式已经准备就绪。
	//4.开始读取数据
	byte[] arr = new byte[buf.limit()];
	buf.get(arr);
	此时将buf中的数据读取到arr中,读取后缓冲区状态如下:
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190407215802404.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzM1NzYz,size_16,color_FFFFFF,t_70)
	//5.若需要重复读取数据则调用rewind()方法,该方法可以使得position变为0,使得		
	可以从头开始读取数据
	buf.rewind();
	此时缓冲区状态如下:
	![在这里插入图片描述](https://img-blog.csdnimg.cn/20190407224046745.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzM1NzYz,size_16,color_FFFFFF,t_70)
	//6.读取完成后需要清空缓冲区则执行clear();
	buf.clear();
	![在这里插入图片描述](https://img-blog.csdnimg.cn/2019040722412587.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMzM1NzYz,size_16,color_FFFFFF,t_70)
	此时缓冲区中的数据依然存在,此时数据处于“被遗忘”状态
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值