Java NIO概述(1)
Java NIO是一个从Java 1.4开始就可以代替标准Java IO API的IO API,Java NIO提供了与标准IO不同的IO工作方式。
Java NIO:通道和缓冲区(Channels and Buffers)
标准的IO是基于字节流和字符流进行操作的,而NOI是基于通道和缓冲区进行操作的。数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。
Java NIO: 非阻塞IO(Non-blocking IO)
NIO为所有的原始类型提供缓存支持的数据容器(Boolean除外),使用它可以提供非阻塞式的高伸缩性网络。
Java NIO可以让你非阻塞的使用IO,因为NIO与单向的IO不同它的通道是双向的。
Java NIO: 选择器(Selectors)
Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。
Java NIO: 核心API
Java NIO 由 Channels、Buffers、Selectors几个核心组件组成。其它组件,如Pipe和FileLock,只是与三个核心组件共同使用的工具类。
Channel
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
这些Channel的实现通道涵盖了UDP 和 TCP 网络IO,以及文件IO。
Buffer
- ByteBuffer
- CharBuffer
- DoubleBuffer
- FloatBuffer
- IntBuffer
- LongBuffer
- ShortBuffer
这些Buffer覆盖了通过IO发送的基本数据类型:byte, short, int, long, float, double 和 char。Java NIO 还有一个 MappedByteBuffer,用于表示内存映射文件。
Selector
Selector允许单线程处理多个 Channel。以下是在一个单线程中使用一个Selector处理3个Channel的图示:
如要使用Selector时,需向Selector注册Channel,然后调用select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。这个方法一旦返回,线程就可以处理这些事件。