Java NIO 概述

来源:互联网 发布:c语言socket udp 编辑:程序博客网 时间:2024/06/05 06:07

Java NIO主要包括以下核心组件:

  • 通道
  • 缓冲区
  • 选择器 

Java NIO包含比以上更多的类和组件,但是通道,缓冲区和选择器是核心的API。在我看来,其他的组件,例如Pipe和FileLock是被用来连接这些核心组件的工具类。因此,在这部分我们主要这三个组件。其他组件我们在其他的章节进行讲述。

Channels和Buffer

通常,在NIO中的所有IO操作从Channel开始。Channel有点像流。数据可以通过Channel写入缓冲区,也可以通过Channel从缓冲区读取数据.如下面的图示

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

存在几个Channel和Buffer类型。下面是在Java NIO中Channel的几个主要实现

FileChannel

DatagramChannel

SocketChannel

ServerSocketChannel

如你所见,这些通道包含了TCP+UDP的网络IO,文件IO。

下面是在Java NIO中Buffer的主要实现类:

ByteBuffer

CharBuffer

DoubleBuffer

FloatBuffer

IntBuffer

LongBuffer

ShortBuffer

这些Buffer类包含了你可以通过IO发送的基本数据类型:byte short int long float double char

Java NIO还用一个MappedByteBuffer类被用来连接内存映射文件。

Selectors

一个Selector允许单个线程处理多个通道。当你的程序有多个连接打开,且每个连接的负载比较低,可以考虑使用Selector.比如,一个聊天室服务器:

下面是使用一个Selector处理三个Channel的例子:


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

多个通道注册到一个Selector上。然后你可以调用select()方法。这个方法会阻塞直到注册到这个Selector上的其中一个Channel准备就绪。一旦这个方法返回,我们就可以处理这些事件。

0 0