node之Stream流详解

在要学习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()

结果显示:
在这里插入图片描述

おすすめ

転載: blog.csdn.net/weixin_47863547/article/details/119392160