NIO简介

nio三大组件

channel,buffer,selector

channel为双向输入输出通道,buffer为缓存,selector为选择器,通过selector来选择线程对出现io操作的channel服务,可有有效的增加线程的工作效率,不用等待某个连接断开才释放线程

bytebuffer

java 复制代码
        //申请空间
        ByteBuffer byteBuffer = ByteBuffer.allocate(100);
        //获取通道
        FileChannel channel = new FileInputStream().getChannel();
        //循环读取
        while (true){
            int read = channel.read(byteBuffer);
            if (read == -1) break;
            //切换读模式
            byteBuffer.flip();
            while (byteBuffer.hasRemaining()){
                byte b = byteBuffer.get();
            }
            //切换写模式
            byteBuffer.clear();
        }

buffer写入数据可以使用

  • 调用 channel 的 read
  • 调用 buffer 自己的 put

buffer读数据有write和get

可以通过这样的方式填充多个buffer,abc为三个buffer对象

java 复制代码
channel.read(new ByteBuffer[]{a, b, c});

同理也可以使用put和write读出写入channel

相关推荐
香菜TTT7 分钟前
大模型上下文协议(MCP):AI 应用的“USB-C”接口技术
开发语言·人工智能·经验分享
aramae16 分钟前
模拟实现strlen()函数 (C语言)
c语言·开发语言·后端
SL_staff44 分钟前
别急着买商业规则引擎:90%风控场景根本不需要全量编码能力
java·程序员·groovy
ManageEngineITSM1 小时前
DevOps和ITIL是什么关系?是替代还是互补一文讲清
java·服务器·资产管理·变更管理
jimy11 小时前
readelf 查看“派生类”的vtable符号
开发语言·c++
SL_staff2 小时前
ERP排程总在纸上谈兵?JVS-APS如何用真实产能约束打通计划与执行闭环
java·人工智能·开源
xcl09252 小时前
24小时自助健身房系统软件开发实战指南:从架构到部署
java·spring boot
ctlover2 小时前
排序与查找算法详解
开发语言·python
YYYing.2 小时前
【C++进阶系列 (七)】C++ RTTI 深度剖析:从 typeid 到 dynamic_cast 的底层之旅
开发语言·c++·c/c++·rtti
码少女2 小时前
Linux--多路转接之select
java·服务器·数据库