NIO -学习分享

简介: NIO -学习分享

NIO

BIO 阻塞 1链接1线程  线程阻塞
线程=clone进程
IO 中断     操作内核
man 2   kernel
代码追踪命令
strace -ff -o out  java  Class
encode 字符转为二进制
decode 二进制转字符
核心API
Channels
Buffers
Selectors

数据可以从channel 到 buffer
也可以从buffer到channel
既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
通道可以异步地读写。
通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

JavaNIO channel 的实现类
FileChannel  用于读取,写入,映射和操作文件的通道  文件通道可以安全使用多个并发线程
DatagramChannel 面向数据报的套接字的可选通道   数据报通道可以安全使用多个并发线程。
    他们支持并发读和写,但最多只有一个线程可能正在读取,并且最多一个线程可能在任何给定的时间写入。
SocketChannel  用于面向流的连接插座的可选通道  套接字通道可以安全地被多个并发线程使用。
ServerSocketChannel 用于面向流的侦听套接字的可选通道 服务器套接字通道可以安全地被多个并发线程使用。
Java NIO里关键的Buffer实现
ByteBuffer
CharBuffer
DoubleBuffer
FloatBuffer
IntBuffer
LongBuffer
ShortBuffer
MappedByteBuffer


Selector
Selector允许单线程处理多个 Channel
要使用Selector,得向Selector注册Channel,然后调用它的select()方法
这个方法会一直阻塞到某个注册的通道有事件就绪。
一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。


Buffer的capacity,position和limit

buffer 两种模式 写 和读  双游标指针


写模式下  limit =capacity       position 最大为 capacity-1
读模式下 position置0  position指针一直读取下一个可读元素并移动到下一个位置。 limit为position

分配Buffer  定义大小为48字节的buffer
ByteBuffer buf = ByteBuffer.allocate(48);
写数据到Buffer有两种方式:
从Channel写到Buffer。   int bytesRead = inChannel.read(buf); //read into buffer.
通过Buffer的put()方法写到Buffer里。buf.put(127)
flip()方法
flip方法将Buffer从写模式切换到读模式。调用flip()方法会将position设回0,并将limit设置成之前position的值。
clear()与compact()方法
clear 重置position指针为0    数据并未清楚后续操作将会覆盖写数据
compact 首先将剩余未读取的数据copy到buffer开头 position为剩余数据的长度  

scatter / gather分散聚集
分散将channel中的数据分散写入多个buffer中
gather 聚集 将多个buffer中的数据聚齐写入channel中    scatter / gather经常用于需要将传输的数据分开处理的场合,例如传输一个由消息头和消息体组成的消息,你可能会将消息体和消息头分散到不同的buffer中,这样你可以方便的处理消息头和消息体。 (AMQP 消息 )

Scattering Reads 分散读取
消息体必须固定大小

Java

复制代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

分散读取 模拟AMQP消息内容

// 创建缓冲区

ByteBufferhead=ByteBuffer.allocate(4);

ByteBufferbody=ByteBuffer.allocate(8);

ByteBuffer[]bufferArr={head,body};

longbyteRead=channel.read(bufferArr);

while(byteRead!=-1){

System.out.println("byteRead:"+byteRead);

// 把数据从文件channel里读到buffer里

// 反转buffer把buffer里的数据读到后清空buffer

// buffer反转

head.flip();

body.flip();

// 检查缓冲区是否有足够的空间

while(head.hasRemaining()){

System.out.print((char)head.get());

}

while(body.hasRemaining()){

System.out.print((char)body.get());

}

System.out.println();

head.clear();

body.clear();

byteRead=channel.read(bufferArr);

}


BIO,快递员通知你有一份快递会在今天送到某某地方,你需要在某某地方一致等待快递员的到来。

NIO,快递员通知你有一份快递会送到你公司的前台,你需要每隔一段时间去前台询问是否有你的快递。

AIO,快递员通知你有一份快递会送到你公司的前台,并且前台收到后会给你打电话通知你过来取。

transfer To

目录
相关文章
|
开发者
什么是HaaS
阿里云AIoT年度产品与技术最新发布与解读
什么是HaaS
|
16天前
|
人工智能 自然语言处理 Shell
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
本教程指导用户在开源AI助手Clawdbot中集成阿里云百炼API,涵盖安装Clawdbot、获取百炼API Key、配置环境变量与模型参数、验证调用等完整流程,支持Qwen3-max thinking (Qwen3-Max-2026-01-23)/Qwen - Plus等主流模型,助力本地化智能自动化。
30090 102
🦞 如何在 OpenClaw (Clawdbot/Moltbot) 配置阿里云百炼 API
|
5天前
|
应用服务中间件 API 网络安全
3分钟汉化OpenClaw,使用Docker快速部署启动OpenClaw(Clawdbot)教程
2026年全新推出的OpenClaw汉化版,是基于Claude API开发的智能对话系统本土化优化版本,解决了原版英文界面的使用壁垒,实现了界面、文档、指令的全中文适配。该版本采用Docker容器化部署方案,开箱即用,支持Linux、macOS、Windows全平台运行,适配个人、企业、生产等多种使用场景,同时具备灵活的配置选项和强大的扩展能力。本文将从项目简介、部署前准备、快速部署、详细配置、问题排查、监控维护等方面,提供完整的部署与使用指南,文中包含实操代码命令,确保不同技术水平的用户都能快速落地使用。
4298 0
|
11天前
|
人工智能 安全 机器人
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI助手,支持钉钉、飞书等多平台接入。本教程手把手指导Linux下部署与钉钉机器人对接,涵盖环境配置、模型选择(如Qwen)、权限设置及调试,助你快速打造私有、安全、高权限的专属AI助理。(239字)
6091 16
OpenClaw(原 Clawdbot)钉钉对接保姆级教程 手把手教你打造自己的 AI 助手
|
10天前
|
人工智能 机器人 Linux
OpenClaw(Clawdbot、Moltbot)汉化版部署教程指南(零门槛)
OpenClaw作为2026年GitHub上增长最快的开源项目之一,一周内Stars从7800飙升至12万+,其核心优势在于打破传统聊天机器人的局限,能真正执行读写文件、运行脚本、浏览器自动化等实操任务。但原版全英文界面对中文用户存在上手门槛,汉化版通过覆盖命令行(CLI)与网页控制台(Dashboard)核心模块,解决了语言障碍,同时保持与官方版本的实时同步,确保新功能最快1小时内可用。本文将详细拆解汉化版OpenClaw的搭建流程,涵盖本地安装、Docker部署、服务器远程访问等场景,同时提供环境适配、问题排查与国内应用集成方案,助力中文用户高效搭建专属AI助手。
4324 9
|
12天前
|
人工智能 机器人 Linux
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
OpenClaw(原Clawdbot)是一款开源本地AI智能体,支持飞书等多平台对接。本教程手把手教你Linux下部署,实现数据私有、系统控制、网页浏览与代码编写,全程保姆级操作,240字内搞定专属AI助手搭建!
5374 17
保姆级 OpenClaw (原 Clawdbot)飞书对接教程 手把手教你搭建 AI 助手
|
12天前
|
存储 人工智能 机器人
OpenClaw是什么?阿里云OpenClaw(原Clawdbot/Moltbot)一键部署官方教程参考
OpenClaw是什么?OpenClaw(原Clawdbot/Moltbot)是一款实用的个人AI助理,能够24小时响应指令并执行任务,如处理文件、查询信息、自动化协同等。阿里云推出的OpenClaw一键部署方案,简化了复杂配置流程,用户无需专业技术储备,即可快速在轻量应用服务器上启用该服务,打造专属AI助理。本文将详细拆解部署全流程、进阶功能配置及常见问题解决方案,确保不改变原意且无营销表述。
5853 5
|
14天前
|
人工智能 JavaScript 应用服务中间件
零门槛部署本地AI助手:Windows系统Moltbot(Clawdbot)保姆级教程
Moltbot(原Clawdbot)是一款功能全面的智能体AI助手,不仅能通过聊天互动响应需求,还具备“动手”和“跑腿”能力——“手”可读写本地文件、执行代码、操控命令行,“脚”能联网搜索、访问网页并分析内容,“大脑”则可接入Qwen、OpenAI等云端API,或利用本地GPU运行模型。本教程专为Windows系统用户打造,从环境搭建到问题排查,详细拆解全流程,即使无技术基础也能顺利部署本地AI助理。
7594 17