更新时间:2022-07-25 11:00:01 来源:极悦 浏览1133次
Java NIO (New IO) 是 Java 的替代 IO API,意味着标准 Java IO和Java Networking API 的替代品。Java NIO 提供了与传统 IO API 不同的 IO 编程模型。注意:有时 NIO 被声称是指Non-blocking IO。然而,这并不是原本的意思。此外,NIO API 的某些部分实际上是阻塞的——例如文件 API——所以标签“非阻塞”会有点误导。
Java NIO 使您能够进行非阻塞 IO。例如,线程可以要求通道将数据读入缓冲区。当通道将数据读入缓冲区时,线程可以做其他事情。一旦数据被读入缓冲区,线程就可以继续处理它。将数据写入通道也是如此。
在标准 IO API 中,您使用字节流和字符流。在 NIO 中,您使用通道和缓冲区。数据总是从通道读入缓冲区,或从缓冲区写入通道。
Java NIO 包含“选择器”的概念。选择器是一个对象,可以监视多个通道的事件(例如:连接打开、数据到达等)。因此,单个线程可以监视多个通道的数据。
Java NIO 由以下核心组件组成:
频道
缓冲器
选择器
Java NIO 有比这些更多的类和组件,但在我看来Channel,Buffer 和Selector构成了 API 的核心。其余的组件,例如 Pipe和FileLock只是与三个核心组件一起使用的实用程序类。因此,我将在本 NIO 概述中重点介绍这三个组件。其他组件在本教程其他地方的其自己的文本中进行了解释。请参阅本页右上角的菜单。
通常,NIO 中的所有 IO 都以Channel. AChannel有点像流。从Channel数据中可以读入一个Buffer. 数据也可以从 aBuffer写入 a Channel。这是一个例子:
Java NIO:Channels将数据读入Buffers,Buffers将数据写入Channels
有几种Channel和Buffer类型。Channel以下是Java NIO 中的主要实现列表:
文件频道
数据报频道
套接字通道
服务器套接字通道
如您所见,这些通道涵盖了 UDP + TCP 网络 IO 和文件 IO。
这些类也有一些有趣的接口,但为了简单起见,我将把它们排除在 Java NIO 概述之外。在本 Java NIO 教程的其他文本中,将在相关的地方对它们进行解释。
Buffer以下是Java NIO 中的核心实现列表:
字节缓冲区
字符缓冲区
双缓冲
浮动缓冲区
整数缓冲区
长缓冲区
短缓冲
这些Buffer涵盖了您可以通过 IO 发送的基本数据类型:byte、short、int、long、float、double 和 characters。
Java NIO 还有一个MappedByteBuffer与内存映射文件一起使用的。不过,我将把它Buffer排除在概述之外。
ASelector允许单个线程处理多个Channel's。如果您的应用程序打开了许多连接(通道),但每个连接上的流量很低,这会很方便。例如,在聊天服务器中。
这是使用 aSelector处理 3的线程的图示Channel:
要使用 a Selector,您可以使用它注册Channel's。然后你称之为 select()方法。此方法将阻塞,直到有一个已注册通道的事件准备好。一旦方法返回,线程就可以处理这些事件。事件的示例是传入连接、接收到的数据等。
通过上述介绍,相信大家对Java Nio已经有所了解,大家如果想了解更多相关知识,可以关注一下极悦的Java基础教程,里面有更丰富的知识等着大家去学习,希望对大家能够有所帮助。
0基础 0学费 15天面授
Java就业班有基础 直达就业
业余时间 高薪转行
Java在职加薪班工作1~3年,加薪神器
工作3~5年,晋升架构
提交申请后,顾问老师会电话与您沟通安排学习