原文:《Java NIO Tutorial》、《Java NIO Overview》
Java NIO(New IO) 是 Java 1.4 引入的 IO API。它提供了一种不同的IO操作方式,用于替代原标准的Java IO 和 网络通信API。
Java NIO包含三个核心组件:Channel、Buffer、Selector。
Channel 和 Buffer
标准IO API操作的是 字节流 和 字符流。
NIO 操作的是 channel 和 buffer —— 从 channel 读取数据到 buffer,将 buffer 中的数据写入到 channel。
channel 有点像 stream。
常见的 channel 有 FileChannel、DatagramChannel、SocketChannel、ServerChannel、ServerSocketChannel。
原数据类型中,除了boolean,其它都有相应的buffer。如,ByteBuffer、CharBuffer、IntBuffer等。还有与内存映射文件一起使用的 MappedByteBuffer。
非阻塞 IO
NIO可以实现非阻塞型IO。如:
-
一个线程先告诉 channel 读取数据到 buffer;
-
在这个读取过程中,该线程可以执行其它操作;
-
一旦完成该读取过程,线程可以继续执行后续操作。
数据写入是的非阻塞模式也类似。
Selector
一个 selector 可以监测多个 channel 的事件(如,建立连接、数据到达等)。这样,单个线程可以监测多个 channel 的。
该模式适用于连接数(channel)很多,且每个连接的数据流量都比较低的应用。如,聊天系统的服务端。