116662766740950932
前言
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");
|
1
| const str = buf.toString();
|
Buffer修改指定位
1
| buf[0] = '0'.charCodeAt();
|
Stream流
文件读取流
获取文件读取流
1 2 3
| const fs = require("fs");
const stream = fs.createReadStream("<file>");
|
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();
|
写入数据并关闭流
文件读取流和文件写入流
- 通过pipe管道将文件读取流的数据写入到文件写入流
1 2 3 4 5
| const fs = require("fs");
const readStream = fs.createReadStream("<file>"); const writeStream = fs.createWriteStream("<file>"); readStream.pipe(writeStream);
|
关闭流
事件
文件打开事件
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 () { ... });
|
完成