nodejs流操作

文件读取流

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()
})

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值