Java NIO 组件

17 Mar 2025 | 阅读 2 分钟

在 Java NIO 中,读写是 I/O 的基本过程。从通道读取:我们可以创建一个缓冲区,然后要求通道读取数据。从通道写入:我们可以创建一个缓冲区,用数据填充它,然后要求通道写入数据。

读写操作使用的核心组件是

  • 通道
  • 缓冲区 (Buffers)
  • 选择器

Java NIO 拥有比这些更多的组件和类,但 Channel、Buffer 和 Selector 是 API 的核心。

通道和缓冲区 (Channels and Buffers)

在标准 I/O API 中使用字符流和字节流。在 NIO 中,我们使用通道和缓冲区。NIO 中的所有 I/O 都从通道开始。数据总是从缓冲区写入通道,或从通道读取到缓冲区。

数据读取操作

下面让我们看通道将数据读取到缓冲区的示意图

Java Nio tutorial2

数据写入操作

下面让我们看缓冲区将数据写入通道的示意图

Java Nio tutorial3

通道列表 (Channels List)

在 Java NIO 中,主要使用的通道如下所示

  • DatagramChannel
  • SocketChannel
  • FileChannel
  • ServerSocketChannel

以上通道涵盖了 UDP(用户数据报协议)+ TCP(传输控制协议)网络 I/O 和文件 I/O。

缓冲区列表 (Buffers List)

在 Java NIO 中,核心使用的缓冲区如下所示

  • CharBuffer
  • DoubleBuffer
  • IntBuffer
  • LongBuffer
  • ByteBuffer
  • ShortBuffer
  • FloatBuffer

以上缓冲区涵盖了我们可以通过 I/O 发送的基本数据类型:字符、双精度、整数、长整数、字节、短整数和浮点数。


选择器

Java NIO 提供了“选择器”(selectors)的概念。它是一个对象,可用于监视多个通道上的事件,如数据到达、连接打开等。因此,单个线程可以监视多个通道的数据。

当应用程序有许多打开的通道(连接),但每个连接的流量都很低时,可以使用它。例如:在聊天服务器中。

下面让我们看一个线程使用选择器处理 3 个通道的示意图

Java Nio tutorial4
下一个主题Java NIO 包