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: 非阻塞IONon-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()方法。这个方法会一直阻塞到某个注册的通道有事件就绪。这个方法一旦返回,线程就可以处理这些事件。

posted @ 2019-05-28 14:03  大哥有酒  阅读(176)  评论(0编辑  收藏  举报