【笔记】Nodejs的流和缓冲区

前言

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

完成