首页 > 编程语言 > 详细

Java NIO 概述

时间:2020-12-23 15:04:22      阅读:31      评论:0      收藏:0      [点我收藏+]

Java NIO 概述

原文链接:http://tutorials.jenkov.com/java-nio/overview.html

Java NIO 由以下核心组件组成:

  • 通道
  • 缓冲区
  • 选择器

Java NIO 拥有比这些更多的类和组件,但在我看来 ChannelBufferSelector构成了 API 的核心。其余组件,例如 PipeFileLock 仅仅是与三个核心组件结合使用的实用程序类。因此,在本 NIO 概述中,我将重点介绍这三个组件。其他组件在本教程的其他地方以其自己的文本进行了说明。

1 通道(Channel)和缓冲区(Buffer)

通常,NIO 中的所有 IO 都从一个 Channel 开始。Channel有点像流。Channel 中的数据可以读入到一个Buffer。数据也可以从一个Buffer写入到Channel。如下图所示:

技术分享图片

Java NIO:通道将数据读取到缓冲区中,缓冲区将数据写入通道中

Java中有几种ChannelBuffer类型。这是ChannelJava NIO中主要实现的列表:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

如您所见,这些通道涵盖 UDP + TCP 网络 IO 和文件 IO。

这些类也有一些有趣的接口,但是为了简单起见,我将它们排除在 Java NIO 概述之外。在本 Java NIO 教程的其他文本中将对它们进行解释。

这是 Java NIO 中 Buffer 的关键的实现:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

这些 Buffer 包括了您可以通过 IO 发送的基本数据类型:byte, short, int, long, float, double 和 char。

Java NIO 还有与内存映射文件结合使用的 MappedByteBuffer ,不过,不在 Buffer 概述中说明。

2 选择器(Selectors)

Selector 允许单线程处理多个 Channel。如果您的应用程序打开了很多个连接(通道),但每个连接的流量很少,使用 Selector 就会很方便。例如,在聊天服务器中。

这是使用一个 Selector 来处理 3 个 Channel 的示意图:

技术分享图片

要想使用 Selector,需要向 Selector 注册 Channel,然后,调用 select() 方法。该方法会一直阻塞,直到有一个已注册通道有事件准备就绪。方法返回后,线程就会处理这些事件。事件可以是传入连接,接收到的数据等。

Java NIO 概述

原文:https://www.cnblogs.com/yeyangshu/p/14178251.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!