背景(二) NIO
2018-09-06 本文已影响9人
iMasking
Java NIO 由以下几个核心部分组成:
- Channels
- Buffers
- Selectors
1. 缓冲区 Buffer
Buffer是一个对象,它包含需要写入或者读出的数据。在NIO中加入Buffer是其与传统IO一个重要区别。在NIO库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的; 在写入数据时,写入到缓冲区中。任何时候访问NIO中的数据, 都是通过缓冲区进行操作。

2. 通道 Channel
Channel是一个通道(全双工),可以通过它读取和写入数据。通道与流(单工)的不同之处在于通道是双向的,流只是在一个方向上移动(一个流必须是InputStream或者OutputStream的子类),而且通道可以用于读、写或者同时用于读写。

3. 多路复用器 Selector
多路复用器提供选择已经就绪的任务的能力。Selector 会不断地轮询注册在其_上的Channel, 如果某个Channel. 上面有 新的TCP连接接入、读和写事件,这个Channel就处于就绪状态,会被Selector 轮询出来, 然后通过SelectionKey可以获取就绪Channel的集合,进行后续的I/O 操作。
Java NIO 使用方式

NIO服务端序列图:

NIO客户端序列图:
