码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 缓冲区、通道、选择器


    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就是Selector和Channel之间的桥梁。即Selector和SelectionKey 的事件产生关系

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

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

  • 相关阅读:
    半量化交易(二)
    Redis 缓存击穿(失效)、缓存穿透、缓存雪崩怎么解决?
    mac,linux环境的基础工具安装【jdk,tomcat】
    客户案例:CAC2.0监测异常账号行为,缓解暴力破解攻击
    SQLyog 各版本下载与安装(目前最新版本为13.2.0)
    Python概率-电网-线性和非线性方程和数据分析工程应用
    初识 Azure Sentinel
    【Pytorch深度学习开发实践学习】【AlexNet】经典算法复现-Pytorch实现AlexNet神经网络(1)model.py
    辉芒微IO单片机FT60F025-TRB
    智能壁炉:火焰的数字革命
  • 原文地址:https://blog.csdn.net/sbl19940819/article/details/126973379
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号