在要学习Stream流之前,首先要知道什么是fs 模块。
一.什么是fs模块?
全称为File System,fs模块是Node.js的一个核心模块,专门用来操作系统中的文件,常用的操作方式是对文件的读取和写入使用require(“fs”)载入fs模块,模块中所有方法都有同步和异步两种形式。
二.Stream流
所有的 Stream 对象都是 EventEmitter 的实例
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。
1.读取流
写入readstream.js文件
//读取流
//引入fs文件模块
const fs=require("fs");
//创建读取流
let readStream=fs.createReadStream("./text/data.txt");
//设置流的编码格式
readStream.setEncoding("utf-8");
//总数据
let allData="";
//使用事件监听读取流数据
readStream.on('data',(data)=>{
allData+=data;
});
readStream.on("end",()=>{
//读取数据完成
console.log(allData);
});
//读取报错
readStream.on("error",(err)=>{
if(err)
{
console.log(err.stack);//异常信息
}
});
//最终 读取流不触发 写入完成之后触发
readStream.on("finish",()=>{
//最终处理的代码
console.log("操作完成");
});
data.txt 内容
讲解node stream流 读取流
段落是文章中最基本的单位。内容上它具有一个相对完整的意思;在文章中,段具有换行的标。
段是由句子或句群组成的,在文章中用于体现作者的思路发展或全篇文章的层次。有的段落只有一个句子,称为独句段,独句段一般是文章的开头段、结尾段、过渡段强调段等特殊的段落。
多数段落包括不止一个句子或句群,叫多句段。中文段落开头前一般空两个格。
读取data.txt里的内容
输出结果:
2.写入流
写入 writeStream.js
//创建一个写入流
const fs=require("fs");
let path="./text/error.txt";
//创建写入流
let writeStream=fs.createWriteStream(path,['r+','utf-8']);
//准备写入的数据
let str="1 error:data is undefined; 09:24 \n";
writeStream.write(str,'utf-8',(error)=>{
if(error)
throw error;
});
//关闭当前流
writeStream.end();
writeStream.on("finish",()=>{
console.log("写入数据完成");
});
写入到error.txt文件中
输出结果为:
3.管道流
写入pipeStream.js文件
边读边写
// 管道流
const fs=require("fs");
let read=fs.createReadStream("./text/data.txt");
let write=fs.createWriteStream("./text/error.txt");
//管道流操作
read.pipe(write);
将data.txt文件的内容流入error.txt中 内容是相同的
呈现结果为:
在error.txt中
4.链式流
写入lianstream.js文件
链式是通过连接输出流到另外一个流并创建多个流操作链的机制。链式流一般用于管道操作。接下来我们就是用管道和链式来压缩和解压。
//创建链式流
//常规流的链式写法
const fs=require("fs");
//创建压缩的模块
const zilb=require("zlib");
//创建输出流
let readStream=fs.createReadStream("./text/data.txt");
//创建写入流
let wirteStream=fs.createWriteStream("./text/data.zip");
readStream.pipe(zilb.createGzip()).pipe(wirteStream);
//解压方式为:
zlib.createGunzip()
结果显示: