nodejs:文件可读流fs.createReadStream 文件可写流fs.createWriteStream

  • 文件可读流
  • 文件可写流
  • write执行流程
  • 背压机制

文件可读流


const fs = require('fs')

// 文件可读流的创建
let rs = fs.createReadStream('test.txt', {
    flag: 'r',
    encoding: null,
    fd: null,
    mode: 438, // 十进制
    start: 0,
    // end: 3,
    highWaterMark: 4 // 每次读字节的次数
})

// 文件可读流消费--data
// rs.on('data', (chunk) => {
//     console.log(chunk.toString())
//     // rs.pause() // 暂停数据读取
//     // setTimeout(() => {
//     //     rs.resume() // 恢复数据读取
//     // }, 1000)
// })

// 文件可读流消费--readable
// rs.on('readable', () => {
//     // let data = rs.read()
//     let data
//     // console.log(data)
//     // 最后读取完是null 
//     while((data = rs.read(1)) !== null) {
//         console.log(data.toString())
//         console.log('----', rs._readableState.length) // rs._readableState.length标识缓存区里的字节
//     }
// })

// 文件可读流事件
rs.on('open', (fd) => {
    console.log('文件打开了', fd)
})

rs.on('close', (fd) => {
    // 文件读取完默认是暂停的状态,不会被关闭
    console.log('文件关闭了', fd)
})

let bufferArr = []
rs.on('data', (chunk) => {
    // 数据消费后,文件会被关闭
    console.log(chunk)
    bufferArr.push(chunk)
})

rs.on('end', () => {
    console.log('当数据被清空之后')
    console.log(Buffer.concat(bufferArr).toString()) // 拼接buffer数据
})

rs.on('error', (err) => {
    console.log('出错了')
})

文件可写流

const fs = require('fs')

const ws = fs.createWriteStream('test.txt', {
    flags: 'w',
    mode: 438,
    fd: null,
    encoding: 'utf-8',
    start: 0,
    highWaterMark: 3
})

// ws.write 可以多次调用,且先调用的先执行, 第一个参数是字符串或是buffer
// ws.write('lalala', () => {
//     console.log('数据写完了1')
// })
// ws.write('llllll', () => {
//     console.log('数据写完了2')
// })

ws.on('open', (fd) => {
    console.log('文件打开了', fd)
})

ws.write('0000', () => {
    console.log('数据写完了000')
})

ws.on('close', (fd) => { // 文件写入操作完成后触发
    console.log('文件关闭了', fd)
})

ws.end() // 执行代表写入完成

ws.on('end', () => { // 执行之后意味着数据写入操作完成
    console.log('当数据被清空之后')
})

// ws.write(1, () => { // 验证报错
//     console.log('数据写完了000')
// })

ws.on('error', (err) => {
    console.log('出错了')
})

write执行流程和限流

在这里插入图片描述
在这里插入图片描述

const fs = require('fs')
const ws = fs.createWriteStream('test.txt', {
    highWaterMark: 3// 设置3是可能出现中文,避免乱码
})
let flag = ws.write('1')
flag = ws.write('2')
flag = ws.write('3')


// 限流代码。。。

const fs = require('fs')
const ws = fs.createWriteStream('test.txt', {
    highWaterMark: 3// 设置3是可能出现中文,避免乱码
})
let source = '张三李四'.split('')
let num = 0
let flag = true

function executeWrite() {
    flag = true
    while(num!== 4 && flag) {
        flag = ws.write(source[num])
        num++
    }
}

executeWrite()

ws.on('drain', () => {
    console.log('drain触发了')
    executeWrite()
})

-背压机制

nodejs的stream已实现了背压机制

在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值