Java NIO之 Java NIO Overview(译)

看到一个国外的作者写的关于java的文章还不错,于是便翻译过来了,再加上自己的一些理解


原文地址:Java NIO Overview


Java NIO主要由下面三个核心组件构成:

  • Channels(通道)
  • Buffers(缓冲)
  • Selectors(选择器)

除了上面三个,java nio还有许多的类和组件,但是 Channel、Buffer和Selector组成了核心的API。剩下的组件,比如 Pipe和FileLock仅仅是当我们使用上面三个核心组件的时候使用到的一些帮助类(utility classes),因此在这篇NIO 概述中我主要集中谈这三个组件,其他的会在本教程的其他地方进行讲解。

Channels and Buffer

通常,NIO中的所有IO都以通道(Channle)开始,通道有点像流,通道里的数据可以读取到一个缓冲(Buffer)中,同样也可以将缓冲中的数据写入到一个通道里去,就像下面的例子一样:
Java NIO: Channels read data into Buffers, and Buffers write data into Channels
Java中提供了几个不同类型的Channel和Buffer,下面列出了在Java NIO中几个主要的Channel实现类:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

正如你看到的,上面这些Channel的实现类包含了网络IO中的UDP+TCP以及文件IO。
伴随着这些类,java还提供了一些有意思的接口,但为了简单起见,暂时不讲,当出现与这些接口相关的内容的时候会讲解。
下面列出的是在java nio中Buffer的一些核心的实现类:

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

上面这些buffer实现类包含了可以通过IO传输的基本数据类型:byte, short, int, long, float, double 和字符。
Java NIO中还包含一个 MappedByteBuffer 用来与内存映射文件(memory mapped files)结合使用,本文中将略过。

Selectors(选择器)

一个选择器允许单个线程去处理多个通道,当你的程序打开了许多的连接,但每个连接的流量比较少(low traffic),即通信数据量少,使用Selector很方便。比如聊天服务器。
下面展示的例子是单个线程使用一个Selector处理三个Channels:
Java NIO: A Thread uses a Selector to handle 3 Channel's
为了使用Selector,首先注册Channel到Selector上面,然后调用选择器的 select()方法,这个方法会一直阻塞直到注册的通道中的任何一个有一个事件就绪(比如 incoming connection、data received),一旦该方法返回,线程便可以处理这些事件。

阅读更多
换一批

没有更多推荐了,返回首页