一、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当中
总结
本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容!