node中的pipe可读流

node环境中集成了对文件的读写操作,通常我们利用writeFile和readFile对文件进行读写,但是readFile是一次性对文件全部读入内存,然后写入,这样做常规上没什么问题,但是如果内容太小或者想要分段读写,就会力不从心

const fs = require("fs")

fs.readFile('./test1.txt',(err,obj)=>{
    if(err)
        throw err
    console.log(obj.toString())
    fs.writeFile('./test2.txt',obj,(err,mes)=>{
        if(err)
            throw err
        console.log(mes)

    })
})

在node中可以利用read和write函数,对读入的文件进行操作

const fs = require("fs")
const buf = Buffer.alloc(30) //分配30个字节空间

fs.open("./test1.txt",(err,fd)=>{
    // fd表示从文件读取内容,默认数字从3开始
    if(err){
        throw err
    }
    // 从fd读,然后写入buf,从第三个位置开始写,写九个位置,最后一个3表示从fd的第三个位置开始读
    // vscode utf-8中汉字占三个字节
    fs.read(fd,buf,3,9,3,(err,file)=>{
        // 原文:繁华声遁入空门
        // 读入:华声遁
        console.log(buf.toString())
    })
})

fs.open("./test3.txt","w",(err,fd)=>{
    // 从buf的第三个位置开始读,读三个位置,从文件的第0个位置开始写入
    fs.write(fd,buf,3,3,0,(err,wfile)=>{
        console.log(buf.toString())
        // 写入:华
    })
})

利用可读流可以时刻对文件读取进行控制

const fs = require("fs")
// 创建可读流
const rs = fs.createReadStream('test1.txt')
const ws = fs.createWriteStream("test4.txt")
// 开始监听文件的操作
rs.on('open',(fd)=>{
    console.log(fd)
})
let arr = []
rs.on('data',(chunk)=>{
    //从内存中拿数据的时候执行此操作
    arr.push(chunk)
})

// 结束时触发
rs.on("end",()=>{
    console.log(Buffer.concat(arr).toString())
    ws.write(Buffer.concat(arr))
})

pipe函数实际就是对可读流的一种封装

const fs = require("fs")
const rs = fs.createReadStream("test1.txt")
const ws = fs.createWriteStream("test5.txt")

rs.pipe(ws)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

问也去

创作不易,感谢支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值