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

相关推荐
geovindu4 小时前
go: Enumeration Algorithm
开发语言·后端·算法·golang·枚举算法
C++、Java和Python的菜鸟4 小时前
第2章 前端Web基础(js、vue+Ajax)
java
harmful_sheep5 小时前
idea相关设置
java·ide·intellij-idea
奋发向前wcx5 小时前
y1,y2总复习笔记2 2026.7.15
java·笔记·算法
气概5 小时前
QT集成basler相机
开发语言·数码相机·qt
苦瓜汤补钙5 小时前
Oracle JDK8 环境配置-Win11
开发语言·数据库·笔记·oracle
overmind5 小时前
oeasy Python 102 集合_运算_交集_并集_差集_对称差集
开发语言·python
han_hanker5 小时前
mybatis-plus 常用方法
java·tomcat·mybatis
研☆香5 小时前
JavaScript 绘制简单不规则图形:三角形与五角星实战教程
开发语言·javascript·ecmascript
长不胖的路人甲6 小时前
CAS讲解
java