nodejs stream流

今天起得晚,发现我的博客排名上升到5位数了,激动之情难以言表,只有再写一篇博客来巩固自己的地位(以上内容与本文无关,轻喷~)

之前说过,nodejs操作文件可以用fs系统来实现,不过这样操作的原理是对整个文件的复制粘贴。对整体的操作,所以对于大型文件,这无疑是一种折磨,所以今天介绍流操作,可以有效的避免这种烦恼。
流(stream),即分段操作、流式操作,可以减少内存占用,提高效率
基础知识
Readable---可读操作
Writable---可写操作
Duplex---可读可写操作
Transfrom---操作被写入数据,然后读出结果
所有的 Stream 对象都是 EventEmitter 的实例。常用的事件有:(类似vue的生命周期理解)
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。
实践
流 读取
// 从流中取出数据
var fs=require('fs');
// 设置读取的数据(初始化)
var data="";
// 创建流
var readStream=fs.createReadStream("./content.txt");
// 设置编码格式
readStream.setEncoding("UTF-8");
// 处理流的事件
// 1.当有数据的时候触发
readStream.on("data",function(res){
    data+=res;
});
// 当没有数据的时候触发
readStream.on("end",function(){
    console.log(data);
});
// 当读取文件错误时触发
readStream.on("error",function(err){
    console.log(err);
});
console.log("读取完成");

在这里插入图片描述

流 写入(覆盖写法,下面会说如何改为追加写法)
var fs=require('fs');
// 写入的内容
var text="just do it";
// 创建流
var writerSteam=fs.createWriteStream("content.txt");
// 设置格式
writerSteam.write(text,"UTF-8");
结束
writerSteam.end();
writerSteam.on("finish",function(){
    console.log("写入完成");
});

在这里插入图片描述

在这里插入图片描述

管道 流

关于管道 流,可以这样理解:就像是从一个桶里往另一个桶中抽水一样,中间用水管连接,把数据看作是桶里面的水

在这里插入图片描述

// 管道流(流对流的传递)
// 覆盖写法

var fs=require('fs');
var readStream1=fs.createReadStream("content.txt");
var writeStream2=fs.createWriteStream("./upload/1.txt");
readStream1.pipe(writeStream2);
// 追加写法(替换即可)
// 添加参数(流 写入同样适用)
var writeStream2=fs.createWriteStream('./upload/1.txt', { 'flags': 'a' });

两种写法的效果

在这里插入图片描述

在这里插入图片描述


END

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值