Netty-2 Java NIO

1. Channel

1
NIO中一个连接就是用一个Channel来表示。从更广泛的层面来说,一个通道可以表示一个底层的文件描述符。例如硬件设备、文件、网络连接等。Java NIO中的通道更加细化,例如。对应不同的网络传输协议类型,再JAVA中都用不同的JAVA NIO Channel实现。

Channel类型:

1.FileChannel : 文件通道,用于文件的数据读写,不适合I/O多路复用。
2.SocketChannel:套接字通道,用于Socket套接字TCP连接的数据读写
3.ServerSocketChannel:服务器嵌套字通道,允许我们监听TCP的连接请求,为每个监听到的请求,创建一个SocketChannel
4.DatagramChannel:数据报通道,用于UDP协议的数据读写。

2. Buffer

1
2
NIO的Buffer(缓冲区) 本质上是一个内存块,既可以写入数据也可以从中读取数据。Buffer内部有一个byte[]数组内存块,作为内存缓冲区。为了记录读写的状态和位置Buffer类提供了一些重要的属性。capacity(容量)、position(读写位置)、limit(读写的限制)、mark(标记)
Buffer类是一个非线程安全的类

Buffer类型:

ByteBuffer
CharBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffer
MappedByteBuffer

3. Selector

1
选择器的使命是完成IO的多路复用。一个通道代表一条连接通路,通过选择器可以同时监控多个通道的IO状况。

Selector监控的IO事件类型:

可读:SelectionKey.OP_read
可写:SelectionKey.OP_write
连接:SelectionKey.OP_connect
接收:SelectionKey.OP_ACCEPT