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

推荐订阅源

Google DeepMind News
Google DeepMind News
I
InfoQ
Engineering at Meta
Engineering at Meta
D
DataBreaches.Net
L
LangChain Blog
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Recent Announcements
Recent Announcements
GbyAI
GbyAI
爱范儿
爱范儿
Microsoft Security Blog
Microsoft Security Blog
腾讯CDC
美团技术团队
罗磊的独立博客
Microsoft Azure Blog
Microsoft Azure Blog
WordPress大学
WordPress大学
T
The Blog of Author Tim Ferriss
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
M
MIT News - Artificial intelligence
D
Docker
MongoDB | Blog
MongoDB | Blog
F
Fortinet All Blogs
博客园 - 叶小钗

6Jyc5p+a

【笔记】HermesAgent学习笔记 【笔记】DeepSeekHarness学习笔记 【笔记】Rollup的PluginBabel插件 【笔记】Rollup学习笔记 【笔记】Gulp的BrowserSync插件 【笔记】Node-SSH学习笔记 【笔记】Tapable学习笔记 【笔记】Highlight.js学习笔记 【笔记】Marked学习笔记 【笔记】Webpack通过schema-utils实现Loader参数校验 【笔记】Webpack实现TreeShaking 【笔记】Webpack的WebpackBundleAnalyzer插件 【代码】校验信用卡号码 【笔记】Webpack的SpeedMesureWebpackPlugin插件 【笔记】Codex配置Brave浏览器的MCP 【笔记】Webpack的CSSMinimizerWebpackPlugin插件 【笔记】FastNodeManager学习笔记 【笔记】Terser学习笔记 【笔记】Codex配置Wireshark的MCP 【笔记】Codex配置Unity的MCP 【笔记】Codex配置Blender的MCP 【笔记】Codex配置IDEA的MCP 【笔记】Browserslist学习笔记 【笔记】Codex学习笔记 【笔记】MicrosoftStore微软商店学习笔记 【笔记】通过NapCat和AstrBot实现QQ机器人 【笔记】部署NapCat 【笔记】部署AstrBot 【笔记】Poetry学习笔记 【笔记】uv学习笔记
【笔记】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 () {
...
});

完成