NodeJs学习(流)——Stream

岁酱吖の 提交于 2019-12-05 16:22:09

1、流是一个抽象接口,在NodeJs中,流是很多内置对象的的接口实现,比如:http的request请求就是一个流,标准的输出stdout也有对流的接口实现。

流分为这样的几种类型:

  • Readable——可读
  • Writable——可写
  • Duplex——可读且可写
  • Transform——操作被写入数据,然后读出结果

流的接口实现,一般有以下几种事件:

  • data——有数据读取的时候触发
  • end——数据读取完毕触发
  • finish——所有数据被写入底层时触发
  • error——所有写入和读取的过程发生错误时候触发

2、关于fs模块的流操作

读取文件:

const fs = require('fs');
//创建读取流
const readerStream = fs.createReadStream('input.txt');

readerStream.setEncoding('UTF8');
//触发读取完毕的事件
readerStream.on('end',function(data){
    console.log(data);
})

readerStream是一个eventEmiter的实例。

在data事件中,回调函数的参数,携带的就是一个Buffer对象的实例。存储的数据就是我们读取的数据。

写入文件:

const data = '我是中国人';

const fs = require('fs');

const writerStream = fs.createWriteStream('output.txt');

writerStream.write(data,'UTF8');

writerStream.end();

writerStream.on('finish',function(){
    console.log('写入完成');
})

writerStream.on('error',function(err){
    console.log(err);
    console.log(err.stack);
})

console.log('程序执行完毕')

管道流操作:

const fs = require('fs');

const readerStream = fs.createReadStream('input.txt');

const writerStream = fs.createWriteStream('output.txt');

readerStream.pipe(writerStream);

console.log('程序执行完毕');

压缩文件:

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("文件压缩完成。");

解压文件:

var fs = require("fs");
var zlib = require('zlib');

// 解压 input.txt.gz 文件为 input.txt
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('input.txt'));

console.log("文件解压完成。");

最后总结:

1、流的操作在大体上是对文件的读取、写入、压缩、解压等各种操作。

2、流所常用的事件有 “end”、”data” 、”error” 、 “finish”

3、关于fs模块,创建一个读取流的方式是:

const readerStream = fs.createReadStream('input.txt');

创建一个写入流的方式:

const writerStream = fs.createWriteStream('output.txt');

4、关于文件的写入,有finish事件!文件的读取,一般使用end事件!检测出错使用error事件。监控文件的读取使用data事件!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!