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

相关推荐
sinat_26229211几秒前
Java面试实战:电商场景下的Spring Cloud微服务架构与缓存技术剖析
java·redis·spring cloud·微服务·消息队列·缓存技术·监控运维
大阔几秒前
安卓开发中XML布局的实用技巧 —— 移动应用开发(安卓)
java
用户484695206971 分钟前
ArrayList 源码分析
java
大阔2 分钟前
如何使用Intent在安卓Activity间传输数据 —— 移动应用开发(安卓)
java
AronTing3 分钟前
缓存与数据库一致性深度解析与解决方案
java·后端·面试
AronTing4 分钟前
分布式缓存与本地缓存协同优化实践
java·后端·面试
带刺的坐椅7 分钟前
Java AI(智能体)编排开发就用 Solon Flow
java·ai·openai·solon·solon-flow
苏州向日葵9 分钟前
C#学习知识点记录
开发语言·学习·c#
编码七号14 分钟前
【axios取消请求】如何在token过期后取消未响应的请求
java·前端·javascript