Java IO和Java NIO的区别

Java IO和Java NIO的区别

Java IO (Input/Output)用于执行读写操作。java。IO包包含输入和输出操作所需的所有类。然而, Java NIO (New IO)是从JDK 4引入的,用于实现高速IO操作。它是标准IO API的替代品。在本文中,将讨论这两个IO包之间的区别。

在讨论java IO和java NIO之间的区别之前,我们需要理解几个区分这两种I/O包的关键概念:

面向流的包vs面向缓冲区的包

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

Java IO和Java NIO的区别

与Java IO不同,Java NIO是一个面向缓冲区的包。这意味着将数据读入缓冲区,然后使用通道对其进行进一步处理。例如,一个线程请求通道向缓冲区读入数据,当通道同时向缓冲区读入数据时,线程可以做一些其他的工作。一旦将数据读入缓冲区,线程就可以继续处理在读操作期间留下的工作。因此,nio是一种双向的数据传输。下图展示了一个面向缓冲区的包:

Java IO和Java NIO的区别

阻塞IO和非阻塞IO包

Java IO是阻塞IO。这意味着,如果一个线程正在调用读()或写()操作,该线程将被阻塞,直到有一些数据可读或数据完全写入。这就是为什么它是同步io或阻塞io。

与Java IO不同,Java NIO是非阻塞IO。这意味着,如果一个线程正在调用读()或写()操作,该线程不会被阻塞,直到有一些数据可读或数据完全写入,而不是线程继续做其他事情。这就是为什么它是异步io或非阻塞io的原因。

通道

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

选择器

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

下表说明了 Java IOJava NIO 的区别:

Java IO Java NIO
Java IO代表Java Input Output Java NIO是Java New Input Output的缩写
Java IO在Java内部操作。io包 Java NIO在Java内部运行。nio包
Java IO是面向流的 Java NIO是面向缓冲区的
阻塞IO操作 非阻塞IO操作
频道不可用 渠道是可用的
它处理流数据 它以块的形式处理数据 | 不包含选择器的概念 | 包含选择器的概念

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程