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是一个面向缓冲区的包。这意味着将数据读入缓冲区,然后使用通道对其进行进一步处理。例如,一个线程请求通道向缓冲区读入数据,当通道同时向缓冲区读入数据时,线程可以做一些其他的工作。一旦将数据读入缓冲区,线程就可以继续处理在读操作期间留下的工作。因此,nio是一种双向的数据传输。下图展示了一个面向缓冲区的包:
阻塞IO和非阻塞IO包
Java IO是阻塞IO。这意味着,如果一个线程正在调用读()或写()操作,该线程将被阻塞,直到有一些数据可读或数据完全写入。这就是为什么它是同步io或阻塞io。
与Java IO不同,Java NIO是非阻塞IO。这意味着,如果一个线程正在调用读()或写()操作,该线程不会被阻塞,直到有一些数据可读或数据完全写入,而不是线程继续做其他事情。这就是为什么它是异步io或非阻塞io的原因。
通道
通道是在实体和缓冲区之间有效传输数据的媒介。它充当与数据源/接收器开放连接的网关。
选择器
选择器使用单个线程在多个IO通道中选择通道。
下表说明了 Java IO 和Java 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操作 |
频道不可用 | 渠道是可用的 |
它处理流数据 | 它以块的形式处理数据 | 不包含选择器的概念 | 包含选择器的概念 |