Channel

既可以从通道中读取数据,又可以写数据到通道。
通道可以异步地读写。
通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

Buffer

缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。

基本用法

  1. 写入数据到Buffer
  2. 调用flip()方法
  3. 从Buffer中读取数据
  4. 调用clear()方法或者compact()方法

capacity,position, limit

Buffer

类型

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

Selector

Selector(选择器)是Java NIO中能够检测一到多个NIO通道,并能够知晓通道是否为诸如读写事件做好准备的组件。这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。
Selector

事件类型

事件 SelectionKey常量 SelectionKey方法
Connect SelectionKey.OP_CONNECT isConnectable()
Accept SelectionKey.OP_ACCEPT isAcceptable()
Read SelectionKey.OP_READ isReadable()
Write SelectionKey.OP_WRITE isWritable()

SelectionKey

SelectionKey.interestOps()  
SelectionKey.readyOps()

int select()
int select(long timeout)
int selectNow()

Set selectedKeys = selector.selectedKeys();

SelectionKey.wakeUp()