深入理解Java之NIO概述
概述
Java
NIO是从Java1.4
后加入的新型IO API
。主要包括了以下的核心组件
- 通道
- 缓冲
- 选择器
Java NIO: 通道和缓冲
标准的IO API
中,使用字节流和字符流。在NIO
中使用通道和缓冲。数据总是从通道读取然后放入缓冲或者从缓冲读取写入通道
有几种通道和缓冲类型,以下是主要通道类型
FileChannel
(文件通道)DatagramChannel
(数据报通道)SocketChannel
(套接字通道)ServerSocketChannel
(服务器套接字通道)
这些通道覆盖了 UDP+TCP
的网络IO
以及文件IO
以下是和兴的缓冲实现
ByteBuffer
CharBuffer
DoubleBuffer
IntBuffer
LongBuffer
LongBuffer
ShortBuffer
这些缓冲结构覆盖了基本数据类型
Java NIO: 非阻塞IO
Java NIO
能够做到非阻塞IO
。例如,一个线程能够从通道读取数据到缓冲。当通道读取数据到缓冲时,线程可以做其他事情。一旦数据读取完,线程能够继续执行它
Java NIO: 选择器
Java NIO
包含了选择器的概念。选择器是一种对象,其能够监视多个通道的事件,因此单线程能够监控多通道的数据
下图是一个线程使用选择器处理三个通道
为了使用选择器,首先需要将选择器注册到通道,然后调用select()
方法。这个方法会阻塞直到这些通道产生了任意一个准备好的事件。一旦方法返回了,线程可以处理这些事件