专注Java教育14年 全国咨询/投诉热线:444-1124-454
星辉LOGO图
始于2009,口口相传的Java黄埔军校
首页 hot资讯 一文读懂io与nio的区别

一文读懂io与nio的区别

更新时间:2022-07-07 11:00:19 来源:星辉 浏览785次

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

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

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

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

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

2.阻塞 IO 与非阻塞 IO 包:

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

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

3.渠道:

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

4..选择器:

选择器使用单个线程在多个 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操作
频道不可用 可用的频道
它处理流中的数据 它处理块中的数据
不包含选择器的概念 包含选择器的概念

以上就是关于“一文读懂io与nio的区别”介绍,大家如果对此比较感兴趣,想了解更多相关知识,不妨来关注一下星辉的Java星辉在线学习,里面的课程内容从入门到精通,细致全面,很适合没有基础的小伙伴学习,希望对大家能够有所帮助哦。

提交申请后,顾问老师会电话与您沟通安排学习

免费课程推荐 >>
技术文档推荐 >>