Java NIO 概述

Java NIO包含以下核心组件:

  • Channels
  • Buffers
  • Selectors

Java NIO有比这些更多的类和组件,但在我看来,Channel,Buffer和Selector构成了API的核心。 其余的组件,如Pipe和FileLock,只是与三个核心组件一起使用的实用程序类。 因此,我将在本NIO概述中关注这三个组件。 其他组件在本教程其他地方的自己的文本中进行了解释。 请参阅本页顶部的菜单。

Channels and Buffers

通常,NIO中的所有IO都以Channel开头。 通道有点像流。 从Channel数据可以读入Buffer。 数据也可以从Buffer写入Channel。 这是一个例子:

| Java NIO: Channels and Buffers | | Java NIO: Channels read data into Buffers, and Buffers write data into Channels |

有几种Channel和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

这些缓冲区涵盖了可以通过IO发送的基本数据类型:byte,short,int,long,float,double和characters。

Java NIO还有一个MappedByteBuffer,它与内存映射文件一起使用。 我将把这个缓冲区从这个概述中删除。

Selectors

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

以下是使用Selector处理3个Channel的线程图示:

| Java NIO: Selectors | | Java NIO: A Thread uses a Selector to handle 3 Channel's |

要使用选择器,请使用它注册通道。 然后你调用它的select()方法。 此方法将阻塞,直到有一个已注册通道的事件准备就绪。 一旦该方法返回,该线程就可以处理这些事件。 事件的示例是传入连接,接收数据等。

转载于:https://my.oschina.net/u/2322090/blog/1862285

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值