Java NIO
Channel
既可以从通道中读取数据,又可以写数据到通道。
通道可以异步地读写。
通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
Buffer
缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。
基本用法
- 写入数据到Buffer
- 调用flip()方法
- 从Buffer中读取数据
- 调用clear()方法或者compact()方法
capacity,position, limit

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

事件类型
| 事件 | SelectionKey常量 | SelectionKey方法 |
|---|---|---|
| Connect | SelectionKey.OP_CONNECT | isConnectable() |
| Accept | SelectionKey.OP_ACCEPT | isAcceptable() |
| Read | SelectionKey.OP_READ | isReadable() |
| Write | SelectionKey.OP_WRITE | isWritable() |
SelectionKey.interestOps()
SelectionKey.readyOps()
int select()
int select(long timeout)
int selectNow()
Set selectedKeys = selector.selectedKeys();
SelectionKey.wakeUp()