Java NIO(三)概念

本文介绍Java NIO的核心组件,包括Channel、Buffer和Selector。文章详细阐述了这些组件如何工作,并提供了不同类型的Channel和Buffer实例,以及如何使用Selector在一个线程中处理多个Channel。

Java NIO consist of the following core components:

  • Channels
  • Buffers
  • Selectors
    Java NIO有比这些更多的类和组件,但在我看来,Channel,Buffer和Selector是API的核心。 其余的组件,如Pipe和FileLock只是实用程序类,要与三个核心组件结合使用。 因此,我将在这个NIO概述中关注这三个组件。

Channels and Buffers

通常,NIO中的所有IO都以一个通道开始。 channel有点像流。 通道(channel)数据可以被读入一个缓冲区。 数据也可以从缓冲区写入通道。 这是一个例子:


img_ba76486545ee41994605dd9102bc621e.png
Channels and Buffers.png

有几个通道和缓冲区类型。 以下是Java NIO中通道(channel)主要实现的列表:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel
    正如您所看到的,这些通道涵盖UDP + TCP网络IO和文件IO。

以下是Java NIO中的核心缓冲区实现列表:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer
    这些缓冲区涵盖了您可以通过IO发送的基本数据类型:byte, short, int, long, float, double and characters.

Selectors

选择器允许单个线程处理多个通道。 如果您的应用程序有多个连接(通道)打开,但每个连接只有较低的通信量,则这很方便。 例如,在一个聊天服务器。

下面是一个使用Selector处理3个Channel的线程的例子:


img_31c914f1dea54651d7af61ff9e3f279f.png
Selectors.png

要使用selector,您需要注册channel。 然后你调用它的select()方法。 此方法将阻塞,直到有一个事件准备好注册的频道之一。 一旦方法返回,线程就可以处理这些事件。 事件的例子是传入的连接,收到的数据等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值