Java IO 和 Java NIO 的区别

  • A+
所属分类:轻松一刻
摘要

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

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 的概念

原创文章,作者:ItWorker,如若转载,请注明出处:https://www.ytso.com/276140.html

  • 我的微信公众号
  • 扫一扫关注
  • weinxin
  • 我的新浪微博号
  • 扫一扫关注
  • weinxin
小辉博客

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: