1.流的介绍:
🌵流的类型:
Writable- 可写入数据的流(例如fs.createWriteStream())。Readable- 可读取数据的流(例如fs.createReadStream())。Duplex- 可读又可写的流(例如net.Socket)。Transform- 在读写过程中可以修改或转换数据的Duplex流(例如zlib.createDeflate())。
此外,该模块还包括实用函数 stream.pipeline()、stream.finished() 和 stream.Readable.from()。
2.管道流:
管道提供了⼀个输出流到输⼊流的机制。通常我们⽤于从⼀个流中获取数据并将数据传递到另外⼀个流中。
如上⾯的图⽚所示,我们把⽂件⽐作装⽔的桶,⽽⽔就是⽂件⾥的内容,我们⽤⼀根管⼦(pipe)连接两个桶使得⽔从⼀个桶流⼊另⼀个桶,这样就慢慢的实现了⼤⽂件的复制过程。以下实例是通过读取⼀个⽂件内容并将内容写⼊到另外⼀个⽂件中。
//04stream.js
// 创建
const fs = require("fs");
//创建可读的流
const readStream = fs.createReadStream("./readme.md");
//创建可写的流
const writeStarem = fs.createWriteStream("./test.txt");
//通过管道进行传输
readStream.pipe(writeStarem);
console.log("执行完毕");
会发现文件中项目目录文件夹📂下多了个test.txt文件
3.链式流
链式是通过连接输出流到另外⼀个流并创建多个流操作链的机制。链式流⼀般⽤于管道操作接下来我们就是⽤管道和链式来压缩和解压⽂件。
//🌵压缩文件例子:05compress.js
//压缩
const fs = require("fs");
const zlib = require("zlib");
const gzip = zlib.createGzip();
fs.createReadStream("./readme.md").pipe(gzip).pipe(fs.createWriteStream("./readme.zip"));
console.log("readmd文件压缩成功");
执行 node 05compress.js 命令后,会看到文件夹中多了一个readme.zip的文件。
// 🌵解压文件例子:06decompres.js
const fs = require("fs");
const zlib = require("zlib");
const gunzip = zlib.createGunzip();
fs.createReadStream("./readme.zip").pipe(gunzip).pipe(fs.createWriteStream("./解压.txt"));
console.log("文件解压成功了~!");
执行 node 06decompress.js 命令后,会看到文件夹中多了一个解压.txt的文件。