Java NIO 教程

更新于 2025-12-26

Jakob Jenkov 2020-10-13

Java NIO(New IO,新 IO)是 Java 中一种替代标准 Java IOJava 网络编程 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 引入了若干新概念,包括: