一般认为是同步非阻塞IO或者多路复用IO,他是一种基于通道channel通道和buffer缓冲区的方式。数据总是从通道Channel通道读取到Buffer缓冲区或者从缓冲区写入通道,而selector选择区可以监听多个通道的事件,所以可以使用单线程监听多个数据通道。
主要有以下三个核心概念:
- 通道(Channel):通道可以看作是一个连接源和目标的通道,数据可以通过通道从一个地方传输到另一个地方。通道类似于传统的流(Stream),但与流不同的是,通道是双向的,可以用于读、写或同时进行读写操作。比如硬件设备、文件、网络套接字或可以执行一个或多个IO操作的程序组件的开放链接。Channel常见的实现接口有FileChannel对应文件IO,DategramChannel对应UDP,SocketChannel和ServerSocketChannel对应TCP的客户端和服务器端,Channel和IO中的Stream差不多一个等级,只不过Stream是单向的比如InputStream、OutputStream。
- 缓冲区(Buffer):缓冲区是一个用于储存特定基本类型的数据容器,所有数据都是通过缓冲区进行处理的。缓冲区本质上是一个数组,但它提供了对数据的结构化访问以及维护读写位置的功能。除了Boolean以外,其余每一种基本类型都有一个对应的Buffer类,Buffer的子类有ByteBuffer, CharBuffer, DoubleBuffer, FloatBuffer, IntBuffer, LongBuffer, ShortBuffer 。
- 选择器(Selector):选择器是NIO中的一个重要组件,它可以用于监听多个通道的事件(如连接请求、数据到达等)。通过选择器,程序可以在一个线程中处理多个通道,从而大大提高了I/O处理的效率。