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事件!
来源:CSDN
作者:mapbar_front
链接:https://blog.csdn.net/mapbar_front/article/details/80318817