一、创建读取数据流:
fs模块的createReadStream方法的作用是创建一个读取数据的数据流
const fs = require('fs')
let str = ''//保存流中读取的数据
//1、创建数据流:读文件的数据流
let readStream = fs.createReadStream('./数据流中被读取的文件.txt')
//2、设置数据流的字符集
readStream.setEncoding('utf8')//默认为utf8
//3、注册data事件(data是事件名,类似于click事件名),若该事件被触发,说明数据流中存在了数据,数据会读到回调函数的val中,再将val保存在str中
readStream.on('data',function(val){
str += val
})
//4、注册end事件:若该事件被触发,说明流中没有数据可读,表示读取结束
readStream.on('end',function(){
console.log(str)
})
//5、注册error事件:若该事件被触发,说明读取数据出现了错误,输出错误信息栈中的信息
//堆:无顺序
//栈:有顺序,后进先出(类似的数据结构有函数的递归调用)
readStream.on('error',function(err){
console.log(err.stack)//stack:栈
})
console.log('主程序结束!')//异步
二、数据流中写入数据
fs模块的createWriteStream方法,就可以创建一个写数据的数据流
const fs = require('fs')
let str = '渺沧海之一粟'//在数据流中需要写入的数据
//1、创建写入流
let writeStream = fs.createWriteStream('./数据流中被读取的文件.txt')
//2、设置写入流的字符集:先写入缓存
writeStream.write(str,'utf8')
//3、写入结束后
writeStream.end()
//4、触发事件:finish
writeStream.on('finish',function(){
console.log('写入完成')
})
//触发error
writeStream.on('error',function(err){//err保存读取数据出现了的错误,输出错误信息栈中的信息
console.log(err.stack)//stack:栈
})
console.log('主程序结束!')//异步
三、管道流
用于从一个流中获取数据,并通过该流输出到另一个流。
//从流中获取一个数据,通过该流输出另一个流中
const fs = require('fs')
//1、创建输入流,用于读取数据
let readStream = fs.createReadStream('./数据流中被读取的文件.txt')
//2、创建一个输出流,用于写数据
let writeStream = fs.createWriteStream('./管道输入的文件.txt')//存在即覆盖,不存在即创建并输入
//3、通过输入流调用方法,将数据送入输出流中
readStream.pipe(writeStream)//pipe:管道方法
console.log('主程序结束')
四、链式流创建压缩文件
链式是一个机制,一个流的输出连接到另一个流,并创建一个链多流操作
//压缩文件
const fs = require('fs')//操作系统中的文件
const zlib = require('zlib')//压缩与解压缩模块
let readStream = fs.createReadStream('./数据流中被读取的文件.txt')//要被压缩的文件
.pipe(zlib.createGzip())//zlib.createGzip():创建压缩包 .pipe:管道
.pipe(fs.createWriteStream('./链式数据流创建压缩.zip'))//生成一个.zip压缩文件
console.log('程序执行结束')
五、链式流创建解压文件
链式是一个机制,一个流的输出连接到另一个流,并创建一个链多流操作
const fs = require('fs')
const zlib = require('zlib')//压缩与解压缩模块
fs.createReadStream('./链式数据流创建压缩.zip')//要被解压的文件
.pipe(zlib.createGunzip())//zlib.createGunzip():创建一个解压缩对象,通过管道.pipe连接到解压缩对象
.pipe(fs.createWriteStream('./链式数据流创建解压缩.txt'))//通过管道连接到输出流
console.log('解压成功')