Java NIO 组件17 Mar 2025 | 阅读 2 分钟 在 Java NIO 中,读写是 I/O 的基本过程。从通道读取:我们可以创建一个缓冲区,然后要求通道读取数据。从通道写入:我们可以创建一个缓冲区,用数据填充它,然后要求通道写入数据。 读写操作使用的核心组件是
Java NIO 拥有比这些更多的组件和类,但 Channel、Buffer 和 Selector 是 API 的核心。 通道和缓冲区 (Channels and Buffers)在标准 I/O API 中使用字符流和字节流。在 NIO 中,我们使用通道和缓冲区。NIO 中的所有 I/O 都从通道开始。数据总是从缓冲区写入通道,或从通道读取到缓冲区。 数据读取操作 下面让我们看通道将数据读取到缓冲区的示意图 ![]() 数据写入操作 下面让我们看缓冲区将数据写入通道的示意图 ![]() 通道列表 (Channels List)在 Java NIO 中,主要使用的通道如下所示
以上通道涵盖了 UDP(用户数据报协议)+ TCP(传输控制协议)网络 I/O 和文件 I/O。 缓冲区列表 (Buffers List)在 Java NIO 中,核心使用的缓冲区如下所示
以上缓冲区涵盖了我们可以通过 I/O 发送的基本数据类型:字符、双精度、整数、长整数、字节、短整数和浮点数。 选择器Java NIO 提供了“选择器”(selectors)的概念。它是一个对象,可用于监视多个通道上的事件,如数据到达、连接打开等。因此,单个线程可以监视多个通道的数据。 当应用程序有许多打开的通道(连接),但每个连接的流量都很低时,可以使用它。例如:在聊天服务器中。 下面让我们看一个线程使用选择器处理 3 个通道的示意图 ![]() 下一个主题Java NIO 包 |
Java 缓冲区定义在 java.nio 包内。它定义了所有缓冲区共有的核心功能:limit(限制)、capacity(容量)和 current position(当前位置)。Java NIO 缓冲区用于与 NIO 通道交互。它是我们可以写入数据的内存块,它...
阅读 3 分钟
Java NIO 中的通道之间的数据传输:在 Java NIO 中,我们可以非常频繁地直接将数据从一个通道传输到另一个通道。文件数据的批量传输非常普遍,FileChannel 类中添加了一些优化方法,使其更...
阅读 2 分钟
Java NIO 类包含在名为 java.nio 的包中。理解 NIO 子系统不取代 java.io 包中可用的基于流的 I/O 类很重要,对 java.io 中基于流的 I/O 的良好工作知识有助于理解...
阅读 2 分钟
Java NIO 中的通道是高效地在实体和字节缓冲区之间传输数据的媒介。它从实体读取数据并将其放入缓冲区块以供消耗。通道充当 Java NIO 提供的访问...
阅读 3 分钟
Java 还用于将通道与 TCP(传输控制协议)网络套接字连接。它等同于网络编程中使用的 Java 网络套接字。ServerSocketChannel 类位于 java.nio.channels 包中。让我们看一个 ServerSocketChannel 的例子:ServerSocketChannel ssc...
阅读 2 分钟
Java NIO 通道中的文件锁:FileLock 锁定或尝试锁定文件的给定部分。它属于 java.nio.channels 包,此功能从 JDK 1.4 开始在 Java 中可用。FileLock 用于以共享模式或非共享模式锁定文件....
阅读 3 分钟
Java 用于在两个线程之间建立单向数据连接。它有一个接收通道和一个源通道。数据写入接收通道,然后可以从源通道读取该数据。在 Java NIO 中...
阅读 3 分钟
Java NIO 字符集:JDK 1.4 使用 java.nio.charset.Charset 包引入了字符集的概念。它在给定字符集和 UNICODE 之间的编码和解码中起着重要作用。字符集的名称必须遵循一定的规则。它必须以数字或字母开头....
阅读1分钟
Java NIO 中的编码和解码:使用 Java NIO API,可以执行从一个字符集到另一个字符集的编码和解码操作。CharsetEncoder 和 CharsetDecoder 这两个类在 ByteBuffer 和 CharBuffer 之间的编码和解码中起着重要作用。Reactor 跟踪...
阅读 2 分钟
Java 用于将通道与 TCP(传输控制协议)网络套接字连接。它等同于网络编程中使用的 Java 网络套接字。创建 SocketChannel 的两种方法:可以在传入连接时创建...
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India