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

推荐订阅源

Google Online Security Blog
Google Online Security Blog
博客园_首页
酷 壳 – CoolShell
酷 壳 – CoolShell
Jina AI
Jina AI
博客园 - Franky
大猫的无限游戏
大猫的无限游戏
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
V
V2EX
雷峰网
雷峰网
云风的 BLOG
云风的 BLOG
V
Visual Studio Blog
F
Full Disclosure
Y
Y Combinator Blog
V
V2EX - 技术
Attack and Defense Labs
Attack and Defense Labs
S
Security @ Cisco Blogs
Schneier on Security
Schneier on Security
Microsoft Azure Blog
Microsoft Azure Blog
SecWiki News
SecWiki News
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
The GitHub Blog
The GitHub Blog
量子位
PCI Perspectives
PCI Perspectives
S
Secure Thoughts
D
Darknet – Hacking Tools, Hacker News & Cyber Security
AWS News Blog
AWS News Blog
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
K
Kaspersky official blog
B
Blog
A
Arctic Wolf
Hacker News: Ask HN
Hacker News: Ask HN
L
LangChain Blog
T
Tor Project blog
P
Privacy & Cybersecurity Law Blog
Recent Announcements
Recent Announcements
宝玉的分享
宝玉的分享
The Register - Security
The Register - Security
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
L
Lohrmann on Cybersecurity
D
Docker
A
About on SuperTechFans
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Google DeepMind News
Google DeepMind News
The Last Watchdog
The Last Watchdog
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy International News Feed
Simon Willison's Weblog
Simon Willison's Weblog

6Jyc5p+a

【笔记】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 () {
...
});

完成