NIO 入门

介绍概念:

阻塞IO  、非阻塞 IO

阻塞 IO : 通常进行同步I/o操作时,

如果读取数据,代码会阻塞直至有可供读取数据,

如果写入数据,写入调用将会直至数据能够写入。

非阻塞 IO (NIO):I/O调用不会被阻塞,注册监听感兴趣的特定的I/O事件,如可读数据到达、新的套接字连接等等,在发生特定的事件后,系统知我cf们,NIO中实现的核心对象就是Selector。

        Selector就是注册各种I/O事件的地方,而当我们感兴趣的事件发生时,就是这个 Selector对象会通知我们这个发生的事件。

        当有读或写等任何的事件发生时,可以从Selector中获得相应的SelectionKey,同时从SelectionKey中就可以找到发生的事件和该事件所发生的具体的SelectableChannel,进而获得客户端发过来的数据。

        非阻塞指的是IO事件本身不会阻塞,但是获取IO事件的select()方法是需要阻塞等待的,区别是 阻塞IO 会阻塞在IO操作上,NIO 阻塞在事件获取上,没有事件就没有IO,从高层次看IO就不阻塞了。也就是说只有IO已经发生那么我们才说IO是否阻塞,但是select()阻塞的时候IO还没有发生,谈何IO阻塞呢? NIO的本质是延迟IO操作到真的发生IO的时候,而不是以前的只要IO流打开就一直等待IO操作

NIO的三个核心组件

  • Channels
  • Buffers
  • Selectors

Channel :可以理解成 通道,Channel和IO中的Stream大概是一个等级的,但是,Stream是单向的, Channel是双向的,既可以进行读操作,又可以进行写操作

        NIO通过Channel封装了对数据源的操作,通过Channel我们可以操作数据,但又不必关心数据源的具体物理结构,这个数据源可能是多种的,比如:可以是文件,也可以是网络socket。在大多数应用中,channel与文件描述符或者socket是一 一对应的,channel用于在字节缓冲区和位于通道另一侧的实体(通常是一个文件或套接字)之间有效的传输数据

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值