Java NIO 总览

该系列文章翻译自:http://tutorials.jenkov.com/java-nio/overview.html
留作记录而已,顺便方便大家查阅

Java NIO 包含以下核心组件:

  • Channels
  • Buffers
  • Selector

Java NIO具有比这些更多的类和组件,但是我认为Channel,Buffer和Selector构成了API的核心。 其余的组件(例如Pipe和FileLock)仅是实用程序类,可以与三个核心组件结合使用。因此,在本NIO概述中,我将重点介绍这三个组件。其他组件在本教程的其他地方以其自己的文本进行了说明。请参阅此页面右侧的菜单。

Channels 和 Buffer

通常,NIO中的所有IO均以通道开头。通道有点像流。从通道可以将数据读入缓冲区。数据也可以从缓冲区写入通道。这是一个说明:
Java NIO 总览
Java提供了几种和Buffer类型。下面是Java NIO中主要Channel实现的列表:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

其中涵盖了UDP/TCP这两网络IO,还有文件IO。

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

下面是Java NIO中提供的核心Buffer列表:

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

这些Buffer涵盖了可以通过IO发送的基本数据类型:字节,短,整数,长,浮点,双精度和字符。

Java NIO还具有MappedByteBuffer,它与内存映射文件结合使用。不过,我在概述中并不准备提及。

Selectors

选择器允许单个线程处理多个Channel。 如果您的应用程序打开了许多连接(Channel),但每个连接的流量很少,应该尝试使用Selector。例如,在聊天服务器中。 这是使用Selector同时处理3个通道的线程的图示:
Java NIO 总览
使用Selector时,需要将Channel注册到Selector上。 然后调用它的select()方法。该方法将一直阻塞,直到注册的某一个Channel有一个事件发生。事件发生后会停止阻塞,线程即可处理这个事件。事件示例有:传入连接、接收到的数据等。

相关文章:

  • 2021-10-21
  • 2021-10-23
  • 2022-12-23
  • 2021-07-13
  • 2021-05-15
  • 2022-02-17
  • 2022-12-23
  • 2021-09-05
猜你喜欢
  • 2021-08-24
  • 2021-09-22
  • 2021-05-26
  • 2021-09-19
  • 2022-01-20
  • 2022-12-23
  • 2021-08-08
相关资源
相似解决方案