Jakob Jenkov 2020-10-13
Java NIO(New IO,新 IO)是 Java 中一种替代标准 Java IO 和 Java 网络编程 API 的 IO 编程接口。Java NIO 提供了一种与传统 IO API 不同的编程模型。
注意:有时人们会说 NIO 代表 “Non-blocking IO”(非阻塞 IO)。但这并非 NIO 最初的含义。此外,NIO 中的部分 API 实际上仍是阻塞的——例如文件操作相关的 API——因此将 NIO 称为“非阻塞 IO”略显误导。
Java NIO:非阻塞 IO
Java NIO 支持非阻塞 IO 操作。例如,一个线程可以请求通道(Channel)将数据读入缓冲区(Buffer)。在通道将数据读入缓冲区的过程中,该线程可以去做其他事情。一旦数据被读入缓冲区,线程便可继续处理这些数据。向通道写入数据时也是同样的原理。
Java NIO:通道(Channels)与缓冲区(Buffers)
在标准的 Java IO API 中,我们使用字节流(byte streams)和字符流(character streams)进行操作。而在 NIO 中,我们使用的是通道(Channel)和缓冲区(Buffer)。数据总是从通道读入缓冲区,或从缓冲区写入通道。
Java NIO:选择器(Selectors)
Java NIO 引入了“选择器”(Selector)的概念。选择器是一个可以监控多个通道上事件(如:连接建立、数据到达等)的对象。因此,单个线程就可以同时监控多个通道的数据。
Java NIO 核心概念
与传统的 Java IO 模型相比,Java NIO 引入了若干新概念,包括: