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: 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: A Thread uses a Selector to handle 3 Channel's

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容