Java IO 和 Java NIO 的区别

Java IO 和 Java NIO 的区别

Java IO(输入/输出)用于执行读写操作。 java.io 包包含输入和输出操作所需的所有类。而 Java NIO(New IO)是从 JDK 4 引入的,用于实现高速 IO 操作。它是标准 IO API 的替代方案。本文将讨论这两种 IO 包的区别。

在深入了解 java IO 和 Java NIO 之间的区别之前,我们需要了解一些区分这两个 I/O 包的关键概念:

面向流与面向缓冲区的包:

Java IO 是一个面向流的包,这意味着它可以一次从流中读取一个或多个字节。它使用流在数据源/接收器和 java 程序之间传输数据。它是单向数据传输。下图说明了一个面向流的包:

Java IO 和 Java NIO 的区别
与 Java IO 不同,Java NIO 是一个面向缓冲区的包。这意味着数据被读入缓冲区,使用通道进一步处理数据。例如,一个线程要求通道将数据读入缓冲区,当通道同时将数据读入缓冲区时,该线程可以进行其他工作。一旦数据被读入缓冲区,线程就可以继续处理它在读操作期间留下的工作。因此,NIO 是双向数据传输。下图说明了一个面向缓冲区的包:

Java IO 和 Java NIO 的区别

阻塞 IO 与非阻塞 IO 包:
Java IO 是阻塞 IO。这意味着如果一个线程正在调用 read()write() 操作,该线程将被阻塞,直到有一些数据要读取或数据被完全写入。这就是为什么它是同步 IO 或阻塞 IO。
与 Java IO 不同,Java NIO 是非阻塞 IO。这意味着如果一个线程正在调用 read()write() 操作,则该线程不会被阻塞,直到有一些数据要读取或数据被完全写入,而不是线程继续执行其他操作。这就是为什么它是异步 IO 或非阻塞 IO。

通道:
通道是实体和缓冲区之间进行有效数据传输的媒介。它充当与数据源/接收器的开放连接的网关。

选择器:
选择器使用单个线程在多个 IO 通道中选择通道。

下表说明了 Java IO 和 Java NIO 之间的区别:

Java IO Java NIO
Java IO 代表 Java 输入输出 Java NIO 代表 Java 新输入输出
Java IO 在 java.io 包中运行 Java NIO 在 java.nio 包中运行
Java IO 是面向流的 Java NIO 是面向缓冲区的
阻塞 IO 操作 非阻塞 IO 操作
通道不可用 通道可用
它处理流中的数据 它处理块中的数据
不包含 Selectors 的概念 包含 Selectors 的概念

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程