2. Java NIO 概述

Java NIO由下面几个核心组件组成:

  • Channel
  • Buffer
  • Selector

Java NIO有更多的类和组件,但是依我看来,Channel,BufferSelector是核心的API。剩余的组件,例如PipeFileLock,仅仅是与三个核心组件一起使用的实用工具类。所以在此处,我会把重点放在这三个组件上。其他的组件会在它们自己的章节来学习。具体请参考教程的目录。

Channel 和 Buffer

通常NIO的所有IO都是从Channel开始的。Channel有点儿像stream。从Channel,数据可以被读取到Buffer。当然也可以从Buffer写入到Channel。下面是一个相关示意图:

2. Java NIO 概述_第1张图片

有几种ChannelBuffer的一些类型。下面是Java NIO中主要的一些Channel实现:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

如你所见,这些channel包括了UDP + TCP网络IO,文件IO等。同时还有一些其他的有趣接口,但是为了此篇教程的简单明了,我不准备在这里列出,在与其相关的地方,自然会给出解释说明。

下面的清单是Java NIO中Buffer的一些核心实现:

  • ByteBuffer
  • CharBuffer
  • DoubleBuffer
  • FloatBuffer
  • IntBuffer
  • LongBuffer
  • ShortBuffer

这些Buffer包括了你可以通过IO发送的基础数据类型:byte,short,int,long,float,double 和 character。

Java NIO也有一个MappedByteBuffer,它与内存映射文件同时使用。这里我暂时先不会详细介绍它

Selector

Selector可以让单个线程来处理多个channel。如果你的应用打开许多连接(Channel),但是每个连接的流量都很低(例如在一个聊天服务中),那么这个是非常便利的。

下面的图例是一个线程,使用1个Selector同时处理3个Channel的场景:

2. Java NIO 概述_第2张图片

要使用Selector,你需要像Selector注册channel。然后调用select()方法。此方法将会阻塞,直到有已注册的channel中事件准备就绪。一旦方法返回,线程就可以处理这些事件了。这些事件包括传入连接,接收到了数据等等。


想要查看此教程的目录请点击:Java NIO教程目录贴地址

你可能感兴趣的:(2. Java NIO 概述)