JAVA NIO 翻译系列(一、预览)

原地址:http://tutorials.jenkov.com/java-nio/overview.html

主要是翻译这个帅老外的nio系列,中间加了一点自己的理解,尽量读起来好懂一些,不对之处请指正

java nio由三个核心的组件构成:

    Channels、Buffers、Selector

在nio中所有的io操作都起始于Channel,Channel有点像stream这个概念。可以从Channel读取数据到Buffer,也可以从Buffer中读取数据到Channel中。下面是Channel和Buffer的关系图解:


JAVA NIO 翻译系列(一、预览)_第1张图片
Java NIO: Channels read data into Buffers, and Buffers write data into Channels


Buffer和Channel

各自有一些实现的类,下面是Channel的几个主要的实现类:

         FileChannel、DatagramChannel、SocketChanel、ServerSocketChanel

这些channels覆盖了UDP和TCP协议的网络IO和文件IO。

Buffer也有一些主要的实现类:

         ByteBuffer、CharBuffer、DoubleBuffer、FloatBuffer、IntBuffer、LongBuffer、ShortBuffer

从名字中可以看出来都是一些基本类型的buffer,还有一个MappedByteBuffer,后面会涉及。


Selectors

一个selector允许一个线程处理多个channel。下面是一个selector的图解,展示了一个selector同时处理三个channel



JAVA NIO 翻译系列(一、预览)_第2张图片
Java NIO: A Thread uses a Selector to handle 3 Channel's

要想使用selector,必须把channel注册到selector上面,然后调用它的select()方法.这个方法是阻塞的,一直等到其中的一个已注册到上面的channel准备好一个event。一旦这个方法返回了,这个线程就可以处理这些event。这些event包括连接、数据传输等等。

你可能感兴趣的:(JAVA NIO 翻译系列(一、预览))