Java NIO基本概念

综述

NIO是Java1.4之后的新的一套IO接口,可以理解为非阻塞而不仅仅是new。

1、IO与NIO的区别
  • IO是面向流的,如字节流和字符流;而NIO是面向缓冲的。
  • IO是阻塞的,NIO是非阻塞的。
  • NIO有选择器,而IO没有。
2、NIO基本概念
①、Selector

NIO引入了Selector选择器来监听多个通道事件,可以将多个通道注册到同一个Selector选择器中,然后创建一个线程管理这个选择器,这种情况下一个线程可以管理多个通道,并能够知道读写事件是否做好准备。
在这里插入图片描述

②、Channel和Buffer

NIO中的所有请求都是通过Channel开始的,数据可以从Channel读取到Buffer也可以从Buffer读取到Channel中。
在这里插入图片描述
NIO中Channel的具体实现有下面这几个:

DatagramChannel
SocketChannel
FileChannel
ServerSocketChannel

Buffer的实现如ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer等对应基本数据类型。

3、Buffer

Buffer的使用一般遵循下面的步骤

  • 首先将数据写入buffer;
  • 调用flip()方法切换读/取模式;
  • 从buffer读数据;
  • 调用clear()或者compact()方法

首先将数据写入到buffer中,然后调用flip()方法将buffer从写模式切换到读模式,在读模式下可以读取到之前写入到buffer的所有数据,一旦读取完成之后需要清空缓存区,以便可以再次被使用,清空缓存的方法有两个,一个是flip(),一个是compact()。clear()方法会清除整个缓存;而compact()只会清除已读的数据,未读的部分会被移到最前端,再次写入数据时会在之前未读的后面紧挨着写。

Buffer的capacity、position、limit
position和limit的值要取决于Buffer到底是在读模式还是在写模式,不管在读模式还是写模式capacity的值是不变的。
在这里插入图片描述

  • ①、capacity,也即是Buffer的大小。
  • ②、position代表当前位置,最大值为capacity - 1,buffer从写模式切换到读模式时position会被置为0。
  • ③、limit表示可以向Buffer中写入多少数据,写模式下limit等于capacity,当切换到读模式时,limit的值就等于写模式下的position的大小,这样在读模式下就可以取出position到limit之间的所有数据,也就是之前写入的所有数据。

clear()与compact()方法

  • clear()方法,将buffer清空,但并不是释放空间,而是将之前的数据遗忘,再次写入buffer时会覆盖掉原来的数据。
  • compact()方法,此方法会将未读的数据复制到Buffer的起始出,position值为最后一个未读数据的后面,limit值为capacity的大小,此时写数据并不会覆盖原来的数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值