概述
NIO其核心组件主要有Channel、Buffer、Selector
Channel
NIO中主要的Channel子类有:
- FileChannel
- SocketChannel
Buffer
Buffer实际上一个充当缓冲区的内存区域,Channel 从文件、网络中读取或写入数据的通道
常用的Buffer类:File
- position:对于写模式表示当前可写入的下一个位置;对于读模式则表示下一个可读取的位置
- limit:对于写模式表示当前可写入的数组大小;对于读模式表示当前可读取的数组大小
- capacity:表示当前数组的容量大小
三者的相对关系:0 <= position <= limit <= capacity
常用方法: - flip() :
- allocate():
- limit():
Selector
Selector用于检测注册的channel是否有事件发生,如果检测到有事件发生,就去获取事件并处理发生的事件。每个Selector可以注册多个Channel,一个线程可以管理多个通道连接,只有当注册的Channel有事件发生时,才会去进行读写操作,大大减少了系统开销,而且不必为一个通道连接创建一个线程,不必去维护多线程,也减少了多进程上下文切换所产生的开销
优点
使用场景
- 常用的消息队列底层使用其进行通信,比如阿里开源的RocketMQ
BIO、NIO、AIO对比