5. NIO

作者: 童伯虎 | 来源:发表于2019-07-18 22:44 被阅读0次

NIO是Java提供的非阻塞I/O库。

  • 阻塞/非阻塞:需要等待/无需等待操作完成。
  • 同步/异步:主动获取/接收通知操作结果。
  • NIO:同步非阻塞,发起操作后不必等待完成,但需要主动获取操作结果。

NIO库由三部分组成:

  • 通道:Channel
  • 缓冲区:Buffer
  • 多路复用器:Selector

NIO库中的I/O操作从Channel开始,Channel代表与外部设备(文件、套接字等)的一个连接,通过它读取和写入数据(全双工)。

NIO库中的所有数据都通过Buffer处理。读取数据时,先从Channel读取到Buffer,再通过Buffer操作数据;写入数据时,先写入到Buffer中,再通过Buffer写到Channel。

BIO下,I/O操作是阻塞的,一个连接占用一个线程,而线程是稀缺资源,导致能够同时处理的连接数有限。因此,BIO只适合连接数少的情况。NIO库使用I/O多路复用技术处理多连接轻操作场景。

首先创建一个多路复用器Selector,然后将Channel注册到Selector上,Selector会给每个Channel分配一个凭证SelectionKey。使用Selector#select()方法循环检测各Channel上是否有事件(可接受连接、可发起连接、可读、可写)就绪,返回有就绪事件的SelectionKey列表,从SelectionKey获取Channel和事件,进行I/O操作。

相关文章

  • 5. NIO

    NIO是Java提供的非阻塞I/O库。 阻塞/非阻塞:需要等待/无需等待操作完成。 同步/异步:主动获取/接收通知...

  • 图解Java NIO

    目录: NIO结构 NIO与传统IO异同 NIO使用步骤 NIO代码 ByteBuffer难点解析 1:NIO结构...

  • nio

    参考文章 Java Nio Java NIO学习笔记 - NIO客户端时序图 Java NIO学习笔记 - NIO...

  • NIO(二、Buffer)

    目录 NIO(一、概述)NIO(二、Buffer)NIO(三、Channel)NIO(四、Selector) Bu...

  • NIO(四、Selector)

    目录 NIO(一、概述)NIO(二、Buffer)NIO(三、Channel)NIO(四、Selector) Se...

  • NIO(三、Channel)

    目录 NIO(一、概述)NIO(二、Buffer)NIO(三、Channel)NIO(四、Selector) Ch...

  • 大厂面试系列(二)::NIO和Netty

    NIO和Netty面试题 NIO 阐述 NIO原理? BIO/NIO/AIO有什么区别?有那些实现? 讲讲NIO的...

  • 大厂面试系列(二)::NIO和Netty

    NIO和Netty面试题 NIO 阐述 NIO原理? BIO/NIO/AIO有什么区别?有那些实现? 讲讲NIO的...

  • 5. Java NIO Scatter/Gather(分散/聚合

    Java NIO有内置的分散/聚合(Scatter/Gather)功能。分散聚合的概念应用场景为从channel读...

  • NIO教程 ——检视阅读(上)

    NIO教程 ——检视阅读 参考 BIO,NIO,AIO 总结 Java NIO浅析 Java NIO 教程——极客...

网友评论

    本文标题:5. NIO

    本文链接:https://www.haomeiwen.com/subject/lgzllctx.html