原文链接:http://tutorials.jenkov.com/java-nio/overview.html
Java NIO 由以下核心组件组成:
Java NIO 拥有比这些更多的类和组件,但在我看来 Channel
,Buffer
和 Selector
构成了 API 的核心。其余组件,例如 Pipe
和 FileLock
仅仅是与三个核心组件结合使用的实用程序类。因此,在本 NIO 概述中,我将重点介绍这三个组件。其他组件在本教程的其他地方以其自己的文本进行了说明。
通常,NIO 中的所有 IO 都从一个 Channel
开始。Channel
有点像流。Channel
中的数据可以读入到一个Buffer
。数据也可以从一个Buffer
写入到Channel
。如下图所示:
Java NIO:通道将数据读取到缓冲区中,缓冲区将数据写入通道中
Java中有几种Channel
和Buffer
类型。这是Channel
Java NIO中主要实现的列表:
如您所见,这些通道涵盖 UDP + TCP 网络 IO 和文件 IO。
这些类也有一些有趣的接口,但是为了简单起见,我将它们排除在 Java NIO 概述之外。在本 Java NIO 教程的其他文本中将对它们进行解释。
这是 Java NIO 中 Buffer
的关键的实现:
这些 Buffer
包括了您可以通过 IO 发送的基本数据类型:byte, short, int, long, float, double 和 char。
Java NIO 还有与内存映射文件结合使用的 MappedByteBuffer
,不过,不在 Buffer
概述中说明。
Selector
允许单线程处理多个 Channel
。如果您的应用程序打开了很多个连接(通道),但每个连接的流量很少,使用 Selector
就会很方便。例如,在聊天服务器中。
这是使用一个 Selector
来处理 3 个 Channel
的示意图:
要想使用 Selector
,需要向 Selector
注册 Channel
,然后,调用 select()
方法。该方法会一直阻塞,直到有一个已注册通道有事件准备就绪。方法返回后,线程就会处理这些事件。事件可以是传入连接,接收到的数据等。
原文:https://www.cnblogs.com/yeyangshu/p/14178251.html