Node的流

声明:以下为个人见解,如有错误,欢迎指出。

流是一种优化读取、写入文件的操作。分为:可读流、可写流、双向流、变换流。其中可读流和可写流最为常见。

举例说明,现在需要读取一个文本文件到内存中,然后通过编程操作其内容然后再写入新文件,那么大家都可以理解的过程应该是通过readfile()函数直接将该文件整体读取之内存中即可,做一些操作后,在将其整体写入新文件。小文件这样做当然是没有问题的,但是如何是2GB的电影呢?那这样做的后果就是电脑内存占用2GB,那也就是说下载电影的时候什么都干不了!!!

解决方式当然是有的,因为在你下电影的时候还可以玩游戏。那么接下来就介绍下可读流和可写流以及他们提升读写效率的原理吧。

建立一个可读流:var rs = fs.createReadStream('xxx')。它会帮助我们将xxx文件分为多个部分,一次一次的读入内存,且有相应的事件让我们控制这个读取的过程。其中最重要的两个事件是data和end。当目标文件的一个部分读入后触发data事件,当目标文件读入完成时触发end事件。

建立一个可写流:var ws = fs.createWriteStream('xxx')。它会将内存中每一部分分多次写入到xxx文件,它的重要事件是drain表示该流可以写入更多;当所有数据输出完成时触发finish事件。

那么复制文件的过程就可以写作:rs.pipe(ws)

或者更加直观地写作:

rs.on('data',function(chunk){
    ws.write(chunk)
})
rs.on('end',function(){
    ws.end()
})

网站的文件下载就是用流实现的:服务端程序根据请求找到服务器上的文件,将其以可读流读入内存,然后写到响应中。即rs.pipe(res)。因为请求对象和响应对象都是流对象,甚至可以直接将res返回,即res.pipe(res)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值