• 缓冲区、通道、选择器


    1. 缓存区

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HrNX6Iuv-1663744227867)(en-resource://database/2233:1)]

    缓冲区数据被读完之后,再读需要调用rewind()也叫倒带,再继续调用get()就可以了。

    2. 通道Channel

    NIO中一个连接就用一个通道来表示。

    2.1 通道类型
    • FileChannel:用于文件数据的读写
    • SocketChannel:用于Socket套接字TCP连接数据的读写
    • ServerSocketChannel:服务器监听通道,允许我们监听Socket请求,为每个监听到的请求创建SocketChannel套接字通道
    • DatagramChannel:数据报通道,用于UDP协议的数据读写。
    2.1.1 SocketChannel

    在NIO中,涉及网络连接的通道有两个,一个是SocketChannel负责连接传输,另一个是ServerSocketChannel负责连接的监听。
    ServerSocketChannel应用于服务器端,而SocketChannel同时处于服务器端和客户端。换句话说,对应于一个连接,两端都有一个负责传输的SocketChannel传输通道

    3. 选择器

    选择器的使命是完成IO的多路复用。一个通道代表一条连接通路,通过选择器可以同时监控多个通道的IO(输入输出)状况。选择器和通道的关系,是监控和被监控的关系。
    可供选择器监控的通道IO事件类型,包括以下四种:

    1. 可读:SelectionKey.OP_READ
    2. 可写:SelectionKey.OP_WRITE
    3. 连接:SelectionKey.OP_CONNECT
    4. 接收:SelectionKey.OP_ACCEPT 。比如某个ServerSocketChannel服务器通道,监听到一个新连接的到来,则处于“接收就绪”(OP_ACCEPT)状态
    3.1 SelectionKey 选择键

    SelectionKey就是SelectorChannel之间的桥梁。即SelectorSelectionKey 的事件产生关系

    SelectableChannel.register(selector, SelectionKey.OP_ACCEPT);
    selector 对SelectionKey 1对n
    SelectionKey 对Channel:1对1
    
    • 1
    • 2
    • 3

    通道和选择器的监控关系注册成功后,就可以选择就绪事件。具体的选择工作,和调用选择器Selector的select()方法来完成。通过select方法,选择器可以不断地选择通道中所发生操作的就绪状态,返回注册过的感兴趣的那些IO事件

  • 相关阅读:
    React之如何进行性能优化
    idea基础配置笔记
    在枚举类中“优雅地”使用枚举处理器
    RabbitMQ死信队列原理与项目代码示例
    一个矩形微带贴片天线的调试
    华为推出最速超级充电桩 号称1秒1公里 | 百能云芯
    华为OD机试 - 螺旋数字矩阵
    GaussDB数据库SQL系列-子查询
    神经网络和深度学习-logistic回归
    Java面试题之“==“和“equals“和HashCode的区别
  • 原文地址:https://blog.csdn.net/sbl19940819/article/details/126973379