美文网首页
Node.js Stream(流)

Node.js Stream(流)

作者: 浅浅_2d5a | 来源:发表于2021-08-18 14:38 被阅读0次

1、流是什么?


815a8e07044157f6e85e849f75ec0d7.png

说明流 是一个装 数据的 东西,也可能是一个解析数据的东西,也可能是一个设备
流这个东西,可以读数据,可以写数据等
Node.js,Stream 有四种流类型:
Readable - 可读操作。
Writable - 可写操作。
Duplex - 可读可写操作.
Transform - 操作被写入数据,然后读出结果。
所有的 Stream实例对象都是 EventEmitter 的实例,说明有on方法和emit方法,Stream实例对象常用的事件有:
data - 当有数据可读时触发。
end - 没有更多的数据可读时触发。(如果不写end,就到不了finish事件)
error - 在接收和写入过程中发生错误时触发。
finish - 所有数据已被写入到底层系统时触发。
2、可读流的例子

var fs = require("fs");
var data = '';
// 创建可读流
var readerStream = fs.createReadStream('input.txt');
// 设置编码为 utf8。
readerStream.setEncoding('UTF8');
// 处理流事件 --> data, end, and error
readerStream.on('data', function(chunk) {
   data += chunk;
});
readerStream.on('end',function(){
   console.log(data);
});
readerStream.on('error', function(err){
   console.log(err.stack);
});
console.log("程序执行完毕");

3、写入流的例子

var fs = require("fs");
var data = '菜鸟教程官网地址:www.runoob.com';
// 创建一个可以写入的流,写入到文件 output.txt 中
var writerStream = fs.createWriteStream('output.txt');
// 使用 utf8 编码写入数据
writerStream.write(data,'UTF8');
// 标记文件末尾
writerStream.end();
// 处理流事件 --> finish、error
writerStream.on('finish', function() {
    console.log("写入完成。");
});
console.log("程序执行完毕");

4、管道流
管道提供了一个输出流到输入流的机制。就是数据复制了

var fs = require("fs");
// 创建一个可读流
var readerStream = fs.createReadStream('input.txt');
// 创建一个可写流
var writerStream = fs.createWriteStream('output.txt');
// 管道读写操作
// 读取 input.txt 文件内容,并将内容写入到 output.txt 文件中
readerStream.pipe(writerStream);
console.log("程序执行完毕");

5、链式流
同.then的链式操作

var fs = require("fs");
var zlib = require('zlib');
// 压缩 input.txt 文件为 input.txt.gz
fs.createReadStream('input.txt')
  .pipe(zlib.createGzip())
  .pipe(fs.createWriteStream('input.txt.gz'));
console.log("文件压缩完成。");

6、读、写文件和用流读、写文件的区别
1、readFile(+对应的同步)方法是将要读取的文件内容完整读入缓存区,再从该缓存区中读取文件内容
writeFile(+对应的同步)方法是将要写入的文件内容完整的读入缓存区,然后一次性的将缓存区中的内容写入都文件中

Node.js将文件内容视为一个整体,为其分配缓存区并且一次性将文件内容读取到缓存区中,在这个期间,Node.js将不能执行任何其他处理。所以当读写大文件的时候,有可能造成缓存区“爆仓”
read或readSync方法读取文件内容是不断地将文件中的一小块内容读入缓存区,最后从该缓存区中读取文件内容
write或writeSync方法写入内容时,node.js执行以下过程:1将需要写入的数据写入到一个内存缓存区;2待缓存区写满后再将缓存区中的内容写入到文件中;3重复执行步骤1和步骤2,知道数据全部写入文件为止
以上读写操作,node.js会将文件分成一块一块逐步操作,在读写文件过程中允许执行其他操作。
但有的时候我们并不关心整个文件的内容,而只关注从文件中读取到的某些数据,以及读取到数据时需要执行的处理,这时我们可以使用文件流来处理。
1、createReadStream方法创建一个将文件内容读取为流数据的ReadStream对象
2、createWriteStream方法创建一个将流数据写入文件中的WriteStream对象
以上方法可以对读写文件的过程中进行监听,并定义相关的方法pause和resume暂停或恢复文件的读取操作,可以监听写入时缓存区数据是否已满或者是否已全部输出

image.png

相关文章

  • NodeJs中的stream(流)- 基础篇

    一、什么是Stream(流) 流(stream)在 Node.js 中是处理流数据的抽象接口(abstract i...

  • Node.js学习笔记:Stream(流)

    概念 Stream模块 流(stream)在 Node.js 中是处理流数据的抽象接口(abstract inte...

  • node - 流 浅析

    概念 流(stream)是 Node.js 中处理流式数据的抽象接口。 stream 模块用于构建实现了流接口的对...

  • node.js中流(Stream)的深度剖析

    流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface)。strea...

  • NodeJS学习笔记——Stream(流)

    流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface)。Node....

  • nodejs笔记4(steam)

    流(stream)在 Node.js 中是处理流数据的抽象接口(abstract interface)。 stre...

  • Node.js-Stream

    Stream Node.js提供了四种流 Readable - 可读的流 (例如 fs.createReadStr...

  • nodejs中流(stream)的理解之可读流

    1.流是什么?在node.js官网文档中是这么说的流(stream)在 Node.js 中是处理流数据的抽象接口(...

  • Node.js<四>

    Node.js Stream(流) Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对h...

  • node.js(十)

    Node.js Stream(流)Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。例如,对ht...

网友评论

      本文标题:Node.js Stream(流)

      本文链接:https://www.haomeiwen.com/subject/wvombltx.html