NIO 有三大核心组件:Selector 选择器、Channel 管道、buffer 缓冲区。
NIO 三大核心组件的关系
- 每个 channel 都会对应一个 Buffer,buffer是实际数据的载体,在channel中传输。
- 一个Selector 对应一个线程, 一个线程对应多个 channel(连接)
- 该图反应了有三个 channel 注册到 该 selector //程序
- 程序切换到哪个 channel 是由事件决定的, Event 就是一个重要的概念
- Selector 会根据不同的事件,在各个通道上切换
- Buffer 就是一个内存块 , 底层是有一个数组
- 数据的读取写入是通过 Buffer, 这个和 BIO 不同, BIO 中要么是输入流,要么是输出流, 不能双向,但是 NIO 的 Buffer 是可以读也可以写, 可以使用flip 方法切换,channel 是双向的, 可以返回底层操作系统的情况, 比如 Linux , 底层的操作系统通道就是双向的。