Stream文件流模块以及pipe()进行大文件复制

Stream文件流模块

  • 1.文件流的概念

Node中File System 模块并没有提供一个 copy的方法,但是可以通过读取文件和写入文件的方式实现;
把文件A的内容全部读入Buffer缓冲区,然后再从缓冲区写入文件B,该过程的执行流程图如下:
文件复制流程

缺点:

Buffer缓冲区限制在1GB,这样的操作对于小型的文本文件,没有多大问题,但是对于较大的文件,比如音频,视频文件,如果使用这种方法很容易使内存爆仓.

解决思路:

采用"读一部分,写一部分"方式;不管文件有多大,只要时间允许,总会处理完成.
文件流读写机制
文件A中的数据以流动的形式通过数据管道,然后写入到文件B中
例如: 在网络上观看视频,并不是整个视频都下载好了才播放的,而是下一点播一点.

优点:

接收方可以提前处理,缩短等待时间,提高速度.

  • 2.node的可读流和可写流

Node.js中文件流的操作由Stream模块提供

  • 1>可读流

使用文件流进行文件复制,首先要创建一个可读流(Readable Stream),可读流可以让用户在源文件中分块读取文件中的数据,然后再从可读流中读取数据.创建可读流的语法如下:

fs.createReadStream(path[,options])

说明:由于流是基于EventEmitter的,从流读取数据的最好方法是监听数据事件,并附加一个回调函数

Stream常用事件表:
事件 说明
data 当有数据可读时触发
end 没有更多数据可读时触发
error 在接收和写入过程中发生错误时触发
finish 所有数据已经被写入到底层系统是触发

接下来我们可以结合一个案例演示进一步学习,
创建一个demo文件夹,在文件夹下创建一个input.txt文件,并写入一句话;然后再创建一个read.js文件,代码如下:

/**
 * 从流中读取数据
 */
var fs = require('fs')
var total = ''
// 创建可读流
var readableStream = fs.createReadStream(
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值