Java IO 与 NIO 对比2025年3月17日 | 阅读 3 分钟 让我们看一下表格,展示 Java IO 和 NIO 的主要区别
阻塞式 vs. 非阻塞式 I/O阻塞式 I/O 阻塞式 IO 在返回之前会等待数据被写入或读取。Java IO 的各种流都是阻塞的。这意味着当线程调用 write() 或 read() 时,线程会一直阻塞,直到有数据可读或数据完全写入。 非阻塞式 I/O 非阻塞式 IO 在返回之前不会等待数据被读取或写入。Java NIO 的非阻塞模式允许线程请求将数据写入 Channel,而无需等待其完全写入。在此期间,线程可以继续执行其他任务。 面向流 vs. 面向缓冲区面向流 Java IO 是面向流的 I/O,意味着我们需要一次从流中读取一个或多个字节。它使用流在数据源/接收器和 Java 程序之间传输数据。使用此方法的 I/O 操作速度较慢。 让我们看看 Java 程序中使用输入/输出流的数据流 面向缓冲区 Java NIO 是面向缓冲区的 I/O 方法。数据被读取到缓冲区中,然后通过 Channel 对其进行进一步处理。在 NIO 中,我们使用 Channel 和 Buffer 进行 I/O 操作。 Channel 和 Stream 的主要区别是
因此,通过在 Java NIO 中引入 Channel,可以执行非阻塞式 I/O 操作。 让我们看看 Channel、Buffer、Java 程序、数据源和数据接收器之间的交互 ![]() 通道在 Java NIO 中,Channel 是在实体和字节缓冲区之间高效地传输数据的媒介。它从实体读取数据并将其放入缓冲区块中供消耗。 Channel 作为 Java NIO 提供的网关,用于访问 I/O 机制。通常,Channel 与操作系统文件描述符存在一对一的关系,以提供平台无关的操作特性。 NIO Channel 基础 Channel 的实现使用本地代码来执行实际工作。Channel 接口允许我们以可移植且受控的方式访问底层 I/O 服务。 在层级结构的顶部,Channel 接口如下所示 正如我们在上面的 Channel 接口中看到的,所有 Channel 都具有两个通用操作:
选择器在 Java NIO 中,Selector 是可选择 Channel 的多路复用器,它用作一种特殊的 Channel,可以设置为非阻塞模式。它可以检查一个或多个 NIO Channel,并确定哪个 Channel 已准备好进行通信,即读取或写入。 Selector 的作用是什么 Selector 用于使用单个线程处理多个 Channel。因此,处理 Channel 所需的线程更少。 在线程之间切换对操作系统来说开销很大。因此,为了提高系统效率,可以使用 Selector。 让我们看看一个使用 Selector 来处理 3 个 Channel 的线程的说明 ![]() 创建 Selector 我们可以通过调用 Selector.open() 方法来创建一个 Selector,如下所示: 下一个主题Java NIO Channels |
Java 还用于将通道与 TCP(传输控制协议)网络套接字连接。它等同于网络编程中使用的 Java 网络套接字。ServerSocketChannel 类位于 java.nio.channels 包中。让我们看一个 ServerSocketChannel 的例子:ServerSocketChannel ssc...
阅读 2 分钟
Scatter/Gather 或 Vectored I/O 在 Java NIO 中,通道提供了称为 scatter/gather 或 vectored I/O 的重要功能。这是一种简单而强大的技术,通过该技术可以使用单个 write() 函数将字节从一组缓冲区写入流……
阅读 4 分钟
Java NIO 字符集:JDK 1.4 使用 java.nio.charset.Charset 包引入了字符集的概念。它在给定字符集和 UNICODE 之间的编码和解码中起着重要作用。字符集的名称必须遵循一定的规则。它必须以数字或字母开头....
阅读1分钟
Java NIO 中的通道是高效地在实体和字节缓冲区之间传输数据的媒介。它从实体读取数据并将其放入缓冲区块以供消耗。通道充当 Java NIO 提供的访问...
阅读 3 分钟
Java NIO 通道中的文件锁:FileLock 锁定或尝试锁定文件的给定部分。它属于 java.nio.channels 包,此功能从 JDK 1.4 开始在 Java 中可用。FileLock 用于以共享模式或非共享模式锁定文件....
阅读 3 分钟
Java 用于在两个线程之间建立单向数据连接。它有一个接收通道和一个源通道。数据写入接收通道,然后可以从源通道读取该数据。在 Java NIO 中...
阅读 3 分钟
Java 缓冲区定义在 java.nio 包内。它定义了所有缓冲区共有的核心功能:limit(限制)、capacity(容量)和 current position(当前位置)。Java NIO 缓冲区用于与 NIO 通道交互。它是我们可以写入数据的内存块,它...
阅读 3 分钟
Java 在 Java NIO 中,读写是 I/O 的基本过程。从通道读取:我们可以创建一个缓冲区,然后让通道读取数据。从通道写入:我们可以创建一个缓冲区,用数据填充它,然后让...
阅读 2 分钟
Java NIO 中的通道之间的数据传输:在 Java NIO 中,我们可以非常频繁地直接将数据从一个通道传输到另一个通道。文件数据的批量传输非常普遍,FileChannel 类中添加了一些优化方法,使其更...
阅读 2 分钟
教程 Java 提供了第二个 I/O 系统,称为 NIO(New I/O)。它提供了与标准 I/O API 不同的 I/O 工作方式。它是 Java(从 Java 1.4 开始)的替代 I/O API。它支持面向缓冲区的、基于通道的方法进行 I/O 操作……
阅读 2 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India