Java NIO 主要包括一下核心组件:
- Channels
- Buffers
- Selectors
Java NIO的类远不止这些,但是Channel,Buffer和Selector构成了API的核心。其他组件,如Pipe和FileLock,仅仅是与三个核心组件结合使用的实用工具类。 因此,我将在本节NIO概述中关注这三个组件。
Channels and Buffers
通常,NIO中的所有IO都以一个通道开始。 通道有点像流。 在通道中,数据可以被读入缓冲区。 数据也可以从缓冲区写入通道。 这是一个例子:

有几种通道和缓冲类型。以下是Java NIO中通道的实现类列表:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
这些通道涵盖UDP + TCP网络IO和文件IO的处理。
- ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
这些Buffer覆盖了可以通过IO发送的基本数据类型:byte,short,int,long,float,double和characters。Java NIO也有一个与内存映射文件结合使用的MappedByteBuffer。
Selectors
Selectors允许单个线程处理多个Channel。如果你的应用程序有许多通道代开,但是每个连接流量都很低,那么Selecttor会给你带来便利。例如:聊天服务器。
下面是一个使用Selector处理3个Channel的线程的例子:

要使用Selector,你必须注册Channel到这个Selector。然后调用select()方法,这个方法会阻塞直到有事件(数据读取,连接建立)已经准备好。一旦该方法返回,该线程就可以处理这个事件。
上一节:Java NIO 教程
下一节:Java NIO Channel
网友评论