• 缓冲区、通道、选择器


    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事件

  • 相关阅读:
    LEETCODE力扣详解:7.整数反转;9.回文数
    “美亚杯”第二届中国电子数据取证大赛答案解析(个人赛)
    新起点丨开源建站工具Halo发布2.0版本
    Codasip携手西门子共同为定制处理器提供追踪解决方案
    虚拟摄像头之九: IMX8Q 的 camera.imx8.hal 框架详解
    Bootstrap5 教程
    一文理解Linux的基本指令(三分钟学会Linux基本指令)
    <C++>初始化列表_static成员_友元
    猿创征文| JAVA Web的环境部署
    数据结构——八叉树
  • 原文地址:https://blog.csdn.net/sbl19940819/article/details/126973379