文件读取流
const fs = require('fs');
const path = require('path');
//什么是流 流就是指数据的流动。数据从一个地方慢慢的流动到另一个地方(一部分一部分读取)
//流是有方向的
//可读流 :数据从源头流向内存
// 可写流:数据从内存流向源头
//双工流:两个方向可流动
// 使用流的原因是:其他介质和内存的存储规模和数据处理能力规模大小不同
// 文件流:内存数据和磁盘文件之间的流动
// 文件读取流的创建 {
// encoding:'utf-8', 读取格式
// start:0, 起始位置字节
// end:2, 截止位置字节
// highWaterMark:64*1024 每次读取大小,
// autoClose:true 自动关闭
// }
// 返回:Readable的子类Readstream 事件rs.on(事件名,回调函数)
// 事件处理类型:open、error、close、data、end、pause、resume
//读取流创建
const filename = path.resolve(__dirname,'./src/test.txt')
const rs = fs.createReadStream(filename,{
encoding:'utf-8',
highWaterMark:64*1024,
autoClose:true
})
rs.on('open',function () {
console.log('open')
})
rs.on('error',function () {
console.log('error')
})
rs.on('close',function () {
console.log('close')
})
// 手动关闭文件 自动关闭要等文件读完现在只是打开了文件没读。
// rs.close()
// data事件
rs.on('data',function (chunk) {
console.log(chunk)
rs.pause()
setTimeout(() => {
rs.resume()
},100)
})
rs.on('pause',function () {
console.log('pause')
})
rs.on('resume',function () {
console.log('resume')
})
// rs.pause() 暂停读取文件
文件写入流
无写入背压的状态图 ws.write方法返回true
写入背压的状态图 ws.write方法返回fslse
// 文件读取流的创建 {
// encoding:'utf-8', 写入格式
// start:0, 起始位置字节
// end:2, 截止位置字节
// highWaterMark:64*1024 每次写入大小,
// autoClose:true 自动关闭
// }
// 返回:writeable的子类writestream 事件rs.on(事件名,回调函数)
// 事件处理类型:open、error、close、data、end、write、
const ws = fs.createWriteStream(filename,{
encoding:'utf-8',
highWaterMark:2,
autoClose:true,
flags:'a'
})
//写入一组数据用write 返回一个布尔值 可以利用这个布尔值来判断是否存在背压问题
// true:表示写入通道没有被填满,可以继续写入,不用排队等候。因为允许一次写入的大小有限制
// false:表示写入通道被填满,接下来数据将进入写入队列进行等待
// const flag = ws.write('hello')
// console.log(flag + '1')
//当写入队列清空时,会触发drain事件
let i = 0;
function write() {
let flag = true
while (i < 1024 * 5 && flag) {
flag = ws.write('b')
i ++
}
}
write()
//当写入通道之中清空时候会触发该函数
ws.on('drain',function () {
console.log('next')
write()
})