Netty三大核心组件之Channel
所有的 NIO 操作始于通道,通道是数据来源或数据写入的目的地,主要地,我们将关心 java.nio 包中实现的以下几个 Channel:
FileChannel:文件通道,用于文件的读和写。
DatagramChannel:用于UDP连接的接收和发送
SocketChannel:TCP客户端
ServerSocketChannel:TCP服务端,监听某个端口进来的请求。
Channel 经常翻译为通道,类似 IO 中的流,用于读取和写入。它与前面介绍的 Buffer 打交道,读操作的时候将 Channel 中的数据填充到 Buffer 中,而写操作时将 Buffer 中的数据写入到 Channel 中。
SocketChannel
打开一个TCP链接:
1 |
|
当然了,上面的这行代码等价于下面的两行:
1 2 3 4 |
|
SocketChannel 的读写和 FileChannel 没什么区别,就是操作缓冲区。
1 2 3 4 5 6 7 |
|
ServerSocketChannel
ServerSocketChannel 用于监听机器端口,管理从这个端口进来的 TCP 连接。
1 2 3 4 5 6 7 8 9 |
|
这里我们看到了SocketChannel的第二个实例化方式。
到这里,我们应该能理解SocketChannel了,它不仅仅是TCP客户端,它代表的是一个网络通道,可读可写。
ServerSocketChannel不和Buffer打交道了,因为它并不实际处理数据,一旦接到请求,就会实例化一个SocketChannel,之后再这个简介通道上传递的数据它就不管了,它会继续监听端口等待下一个连接。
还没有评论,来说两句吧...