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

相关推荐
froginwe111 天前
MongoDB 删除数据库
开发语言
无敌最俊朗@1 天前
01-总结
java·jvm·数据库
Java小混子1 天前
golang项目CRUD示例
开发语言·后端·golang
想搞艺术的程序员1 天前
Go 优雅关闭实践指南:从原理到框架落地
开发语言·后端·golang
m5655bj1 天前
Python 查找并高亮显示指定 Excel 数据
开发语言·python·excel
华仔啊1 天前
MyBatis-Plus 让你开发效率翻倍!新手也能5分钟上手!
java·后端·mybatis
洛克希德马丁1 天前
Qt 配置Webassemble环境
开发语言·qt·webassembly·emscripten·emsdk
武子康1 天前
Java-167 Neo4j CQL 实战:CREATE/MATCH 与关系建模速通 案例实测
java·开发语言·数据库·python·sql·nosql·neo4j
自由的好好干活1 天前
C#桌面框架与Qt对比及选型(国产操作系统开发视角)
开发语言·qt·c#
upward_tomato1 天前
python中模拟浏览器操作之playwright使用说明以及打包浏览器驱动问题
开发语言·python