Java NIO包含如下核心组件:html
Java NIO有比这些更多的类和组件,但在我看来,Channel,Buffer和Selector构成了API的核心。 其他的组件,如Pipe和FileLock,只是与三个核心组件一块儿使用的实用程序类。 所以,我将在本NIO概述中关注这三个组件。 其余组件在本教程其余地方的本身的文本中进行了解释。 请参阅本页顶部的菜单。java
一般,NIO中的全部IO都以Channel开头。 通道有点像流。 从Channel数据能够读入Buffer。 数据也能够从Buffer写入Channel。 这是一个例子:服务器
| | | Java NIO: Channels read data into Buffers, and Buffers write data into Channels |网络
有几种Channel和Buffer类型。 如下是Java NIO中主要Channel实现的列表:app
如您所见,这些通道涵盖UDP + TCP网络IO和文件IO。线程
这些类也有一些有趣的接口,但为了简单起见,我会将它们排除在Java NIO概述以外。 在Java NIO教程的其余文本中,将相关地解释它们。htm
如下是Java NIO中核心Buffer实现的列表:教程
这些缓冲区涵盖了能够经过IO发送的基本数据类型:byte,short,int,long,float,double和characters。接口
Java NIO还有一个MappedByteBuffer,它与内存映射文件一块儿使用。 我将把这个缓冲区从这个概述中删除。事件
选择器容许单个线程处理多个通道。 若是您的应用程序打开了许多链接(通道),但每一个链接只有较低的流量,这很方便。 例如,在聊天服务器中。
如下是使用Selector处理3个Channel的线程图示:
| | | Java NIO: A Thread uses a Selector to handle 3 Channel's |
要使用选择器,请使用它注册通道。 而后你调用它的select()方法。 此方法将阻塞,直到有一个已注册通道的事件准备就绪。 一旦该方法返回,该线程就能够处理这些事件。 事件的示例是传入链接,接收数据等。