JAVA NIO 翻译系列(一、预览)
2017-08-09 本文已影响62人
shadowCc
原地址: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 ChannelsBuffer和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包括连接、数据传输等等。