码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Java NIO 通信基础


    Java NIO 由以下三个核心组件组成:

    • Channel(通道)
    • Buffer(缓冲区)
    • Selector(选择器)

    一、 NIO 和 OIO 的对比

    1.1 OIO是面向字节流的,NIO是面向缓冲区的

    OIO是面向字节流或者字符流的,在一般的OIO操作中,我们以流式的方式顺序地从一个流中读取一个或多个字节,因此,我们不能随意地改变读取指针的位置。

    NIO中引入Channel和Buffer的概念。读取和写入,只需要从通道中读取数据到缓冲区中,或将数据从缓冲区写入到通道中。NIO不像OIO那样是顺序操作,可以随意地读取Buffer中任意位置的数据。

    1.2 OIO操作是阻塞的,而NIO操作是非阻塞的

    1.3 OIO没有选择器概念,而NIO有选择器的概念

    二、通道(Channel)

    在OIO中,同一个网络连接会关联到两个流:一个输入流,另一个输出流。

    在NIO中,同一个网络连接用一个通道表示,所有的IO操作都是从通道开始的,既可以从通道读取,也可以向通道写入。

    三、选择器(Selector)

    通过Selector,一个线程可以查询多个通道的IO事件的就绪状态。实现IO多路复用,从具体的开发层面来说,首先把通道注册到选择器中,然后通过选择器内部的机制,可以查询(select)这些注册的通道是否有已经就绪的IO事件(例如可读、可写、网络连接完成等)。

    四、缓冲区(Buffer)

    应用程序与通道(Channel)主要的交互操作,就是进行数据的read读取和write写入。通道的读取,就是将数据从通道读取到缓冲区中;通道的写入,就是将数据从缓冲区写入到通道中。

  • 相关阅读:
    阿里CEO吴泳铭:AI最大的想象力不在手机屏幕,而是改变物理世界
    【Unity db】sqlite
    【计算机视觉】图像处理算法(形态学滤波篇)
    Python面向对象,实现图片处理案例,支持:高斯模糊、Canny边缘检测、反转边缘图像、生成手绘效果、调亮度......等等
    go语言学习-数据结构
    Elkeid开源项目部署踩坑
    代码随想录算法训练营第二十七天| 131.分割回文串
    目前最流行的 5 大 Vue 动画库,使用后太炫酷了
    Python自定义可切片的类
    leetcode 63. 不同路径 II
  • 原文地址:https://blog.csdn.net/sfklyqh/article/details/127128540
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号