惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

D
Docker
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
C
Cisco Blogs
Scott Helme
Scott Helme
Know Your Adversary
Know Your Adversary
NISL@THU
NISL@THU
C
Cyber Attacks, Cyber Crime and Cyber Security
D
Darknet – Hacking Tools, Hacker News & Cyber Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
S
Schneier on Security
I
Intezer
Spread Privacy
Spread Privacy
AWS News Blog
AWS News Blog
V
Vulnerabilities – Threatpost
Cloudbric
Cloudbric
V2EX - 技术
V2EX - 技术
Google Online Security Blog
Google Online Security Blog
L
Lohrmann on Cybersecurity
Recent Commits to openclaw:main
Recent Commits to openclaw:main
L
LINUX DO - 热门话题
S
Secure Thoughts
T
The Exploit Database - CXSecurity.com
博客园 - 【当耐特】
Recent Announcements
Recent Announcements
Security Archives - TechRepublic
Security Archives - TechRepublic
Stack Overflow Blog
Stack Overflow Blog
罗磊的独立博客
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
K
Kaspersky official blog
阮一峰的网络日志
阮一峰的网络日志
博客园_首页
Latest news
Latest news
B
Blog
F
Full Disclosure
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
L
LangChain Blog
GbyAI
GbyAI
Last Week in AI
Last Week in AI
S
Security Affairs
Apple Machine Learning Research
Apple Machine Learning Research
N
Netflix TechBlog - Medium
Security Latest
Security Latest
Vercel News
Vercel News
Y
Y Combinator Blog
G
GRAHAM CLULEY
S
Securelist
T
Troy Hunt's Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
雷峰网
雷峰网

6Jyc5p+a

【笔记】通过NapCat和AstrBot实现QQ机器人 【笔记】部署NapCat 【笔记】部署AstrBot 【笔记】Poetry学习笔记 【笔记】uv学习笔记 【笔记】Nodejs通过mysql2操作MySQL数据库 【笔记】CodeBuddy学习笔记 【笔记】MiMoCode学习笔记 【笔记】OpenCode使用XiaomMiMo作为供应商 【笔记】OpenCode学习笔记 【笔记】IDEA的AiAssistant使用自定义的Agent 【笔记】MacOS上删除TimeMachine时间机器备份 【笔记】MacOS上部署XiaomiMiloco 【笔记】Docker的上下文 【源码】Python3创建1x1像素的图片 【靶场】xss-labs通关攻略 【靶场】upload-labs通关攻略 【笔记】Brave迁移ProxySwitchyOmega数据到ZeroOmega 【笔记】通过Docker部署DVWA 【笔记】通过Docker部署xss-labs 【笔记】通过Docker部署upload-labs 【笔记】通过Docker部署Vulhub 【笔记】宝塔通过Docker部署SQLI-LABS 【笔记】宝塔部署Docker 【笔记】通过Docker部署SQLI-LABS 【靶场】SQLI-LABS通关攻略 【笔记】MSYS2学习笔记 【笔记】Cygwin学习笔记 【笔记】Windows添加自定义右键菜单项 【笔记】Linux上和MacOS上配置环境变量 【笔记】命令行配置HTTP代理 【笔记】Windows上配置环境变量 【踩坑】Windows上在IDEA中配置Codex报错 【笔记】start学习笔记 【笔记】Windows的CMD命令学习笔记 【笔记】Java的PriorityQueue和PriorityBlockingQueue 【笔记】IDEA通过AIAssistant安装Codex 【笔记】bcrypt学习笔记 【速查表】浏览器默认禁用的不安全端口 【笔记】Astro学习笔记 【代码】Python3实现从NTP服务器同步时间 【笔记】Koa学习笔记 【笔记】Solidity计算字符串的MD5值 【笔记】Hardhat学习笔记 【笔记】Go安装笔记 【笔记】CVE-2024-3094漏洞利用 【笔记】CVE-2026-43284和CVE-2026-43500漏洞利用 【笔记】CVE-2023-3567漏洞利用 【代码】Python3读写M1卡 【笔记】M1卡学习笔记 【笔记】Python3中文转拼音 【代码】Python3生成中国大陆姓名拼音 【代码】Python3爬取中国大陆手机号段 【笔记】Nodejs发送请求 【笔记】Trello通过API添加待办事项 【笔记】Nodejs的事件 【笔记】Nodejs的文件和目录操作 【笔记】CNVD-2020-10487漏洞利用 【笔记】CVE-2017-12617漏洞利用 【笔记】PHP输出源码 【笔记】PHP的Phar 【笔记】通过Docker部署OnlineTools 【笔记】XML学习笔记 【笔记】Windows的用户和组 【笔记】CVE-2006-7243漏洞利用 【代码】JS将目录编号转换为十六进制 【笔记】PHP抑制所有报错 【笔记】HFish学习笔记 【笔记】JumpServer学习笔记 【笔记】Conpot学习笔记 【笔记】南墙WAF学习笔记 【笔记】堡塔云WAF学习笔记 【笔记】Windows的远程桌面服务 【笔记】Windows的防火墙
【笔记】Nodejs的流和缓冲区
6Jyc5p+a · 2026-05-30 · via 6Jyc5p+a

前言

Nodejs的Steam流和Buffer缓冲区学习笔记

Buffer缓冲区

创建Buffer对象

  • 每次创建Buffer对象,Nodejs都会向操作系统申请8K字节的内存

通过指定字节长度创建Buffer对象

1
const buf = Buffer.alloc(0);

通过字符串创建Buffer对象

1
const buf = Buffer.from("<str>");
  • 指定编码集
1
const buf = Buffer.from("<str>", "UTF-8");

Buffer对象转换为字符串

  • 指定编码集
1
const str = buf.toString("UTF-8");
  • 缺省值为UTF-8
1
const str = buf.toString();

Buffer修改指定位

1
buf[0] = 255;
1
buf[0] = 0xFF;
1
buf[0] = '0'.charCodeAt();

Stream流

文件读取流

获取文件读取流

1
2
3
const fs = require("fs");

const stream = fs.createReadStream("<file>");
  • 指定读取的字节范围为[start,end]

start:字节范围开始位置,缺省值为0
end:字节范围结束位置,缺省值为文件总字节数

1
2
3
4
5
6
const fs = require("fs");

const stream = fs.createReadStream("<file>", {
start: 0,
end: 2048
});

highWaterMark:单次缓冲区大小,缺省值为64*1024

1
2
3
4
5
const fs = require("fs");

const stream = fs.createReadStream("<file>", {
highWaterMark: 1024
});

文件写入流

获取文件写入流

1
2
3
4
5
const fs = require("fs");

const stream = fs.createWriteStream("<file>", {
flags: "a",
});

写入数据

  • 写入完成需要关闭流
1
2
stream.write("<str>");
stream.close();

写入数据并关闭流

  • 写入完成会自动关闭流
1
stream.end("<str>");

文件读取流和文件写入流

  • 通过pipe管道将文件读取流的数据写入到文件写入流
1
2
3
4
5
const fs = require("fs");

const readStream = fs.createReadStream("<file>");
const writeStream = fs.createWriteStream("<file>");
readStream.pipe(writeStream);

关闭流

1
stream.close();

事件

文件打开事件

1
2
3
stream.on("open", function (fd) {
...
});

文件关闭事件

1
2
3
stream.on("close", function () {
...
});

读取到数据事件

1
2
3
stream.on("data", function (chunk) {
...
});

文件读取结束事件

1
2
3
stream.on("end", function () {
...
});

写入完成事件

1
2
3
stream.on("finish", function () {
...
});

完成