Node的stream数据流你了解吗
作者:Han_Zhou_Z
这篇文章主要为大家详细介绍了Node的stream数据流,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
一、Node的数据流(stream)
1、处理缓存的方式
(1)一次性全部读取,然后再进行处理。缺点是大文件处理非常耗时,优点是过程直观
(2)读取一块处理一块.优点是提高程序的性能
2、四种类型的流
Readable
- 其是用于读操作
Writable
- 用在写操作
Duplex
- 其可以用于读取和写入操作
Transform
- 输出基于输入的地方进行计算的一种双相流
每种流都是事件触发器,当某个流被调用时,就会触发,抛出一个事件:
'data'事件:表示流中有数据可以读取
'end'事件:表示流中没有数据可以读取
'error'事件:读写数据错误时触发
'finish'事件:数据刷新到底层系统时触发
const fs = require('fs'); let str_data = ''; //创建读数据的流 let readerStream = fs.createReadStream('./test.txt'); //设置流的编码格式 readerStream.setEncoding('utf8'); //给流绑定事件 readerStream.on('data',function (chunk) { str_data += chunk }) readerStream.on('end',function (){ console.log("读取的数据是:",str_data) }) readerStream.on('error',function (err){ console.log(err.stack) }) console.log('-----End-----') // 读取的数据是: 离离原上草, // 一岁一枯荣; // 野火烧不尽, // 春风吹又生。
const fs = require('fs'); //创建一个读数据的流 let readerStream = fs.createReadStream('./test.txt') //创建一个写数据的流 let writerStream = fs.createWriteStream('./out.txt') //创建管道流 readerStream.pipe(writerStream) console.log('----End----') //可以完成复制,将test文件中的内容复制到out文件中
3、zlib模块:用于文件的压缩与解压缩
(1)压缩方法:zlib.createGzip()
const fs = require('fs'); const zlib = require('zlib'); //创建一个读数据的流 let readerStream = fs.createReadStream('./test.txt') .pipe(zlib.createGzip()) .pipe(fs.createWriteStream('./text.zip')) readerStream.on('error',function (err) { console.log(err.stack) }) console.log('----End----') //创建一个名为text.zip的压缩包
(2)解压缩方法:zlib.createGunzip()
const fs = require('fs'); const zlib = require('zlib'); fs.createReadStream('./test.zip') .pipe(zlib.createGunzip()) .pipe(fs.createWriteStream('./db.txt')) //解压名为test.zip的压缩包,并将其中的内容复制到db.txt当中
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注脚本之家的更多内容!