深入理解Java之NIO概述

概述

Java NIO是从Java1.4后加入的新型IO API。主要包括了以下的核心组件

  • 通道
  • 缓冲
  • 选择器

Java NIO: 通道和缓冲

标准的IO API中,使用字节流和字符流。在NIO中使用通道和缓冲。数据总是从通道读取然后放入缓冲或者从缓冲读取写入通道

channel

有几种通道和缓冲类型,以下是主要通道类型

  • 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包含了选择器的概念。选择器是一种对象,其能够监视多个通道的事件,因此单线程能够监控多通道的数据

下图是一个线程使用选择器处理三个通道

selector

为了使用选择器,首先需要将选择器注册到通道,然后调用select()方法。这个方法会阻塞直到这些通道产生了任意一个准备好的事件。一旦方法返回了,线程可以处理这些事件