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

推荐订阅源

S
Securelist
C
Cybersecurity and Infrastructure Security Agency CISA
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security Affairs
Hacker News: Ask HN
Hacker News: Ask HN
L
Lohrmann on Cybersecurity
PCI Perspectives
PCI Perspectives
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
C
Cyber Attacks, Cyber Crime and Cyber Security
Recent Commits to openclaw:main
Recent Commits to openclaw:main
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
MyScale Blog
MyScale Blog
月光博客
月光博客
W
WeLiveSecurity
T
Threat Research - Cisco Blogs
Martin Fowler
Martin Fowler
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
The GitHub Blog
The GitHub Blog
Webroot Blog
Webroot Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
TaoSecurity Blog
TaoSecurity Blog
P
Proofpoint News Feed
Google DeepMind News
Google DeepMind News
F
Full Disclosure
U
Unit 42
Jina AI
Jina AI
博客园 - 司徒正美
阮一峰的网络日志
阮一峰的网络日志
L
LINUX DO - 最新话题
宝玉的分享
宝玉的分享
大猫的无限游戏
大猫的无限游戏
The Hacker News
The Hacker News
The Last Watchdog
The Last Watchdog
T
Troy Hunt's Blog
腾讯CDC
T
Threatpost
H
Hacker News: Front Page
P
Palo Alto Networks Blog
博客园 - 聂微东
Last Week in AI
Last Week in AI
有赞技术团队
有赞技术团队
Help Net Security
Help Net Security
L
LINUX DO - 热门话题
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Spread Privacy
Spread Privacy

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 () {
...
});

完成