文档章节

node 文件操作防爆仓

-鹏
 -鹏
发布于 2017/05/03 15:44
字数 330
阅读 5
收藏 0

我们也可以为数据目标创建一个只写数据流,示例如下:

var rs = fs.createReadStream(src);
var ws = fs.createWriteStream(dst);

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

rs.on('end', function () {
    ws.end();
});

我们把doSomething换成了往只写数据流里写入数据后,以上代码看起来就像是一个文件拷贝程序了。但是以上代码存在上边提到的问题,如果写入速度跟不上读取速度的话,只写数据流内部的缓存会爆仓。我们可以根据.write方法的返回值来判断传入的数据是写入目标了,还是临时放在了缓存了,并根据drain事件来判断什么时候只写数据流已经将缓存中的数据写入目标,可以传入下一个待写数据了。因此代码可以改造如下:

var rs = fs.createReadStream(src);
var ws = fs.createWriteStream(dst);

rs.on('data', function (chunk) {
    if (ws.write(chunk) === false) {
        rs.pause();
    }
});

rs.on('end', function () {
    ws.end();
});

ws.on('drain', function () {
    rs.resume();
});

以上代码实现了数据从只读数据流到只写数据流的搬运,并包括了防爆仓控制。因为这种使用场景很多,例如上边的大文件拷贝程序,NodeJS直接提供了.pipe方法来做这件事情,其内部实现方式与上边的代码类似。

© 著作权归作者所有

-鹏

-鹏

粉丝 21
博文 155
码字总数 92388
作品 0
杭州
前端工程师
私信 提问
OPPO在Find 7的5.5英寸屏幕上贴了防爆膜

OPPO在Find 7的5.5英寸屏幕上贴了防爆膜。 Android开发入门 372858684消息,防爆膜可以有效的防止屏幕碎裂的时候玻璃不会迸溅,但是防爆膜比较容易划伤,算是一把双刃剑吧。OPPO将呼吸灯做在...

净水居
2014/07/14
0
0
常州出差

1.带去一个接口新板子,准备系统样机入库;但是防爆测试的检测人员突然也要样机入库,那边只有1套系统样机,今明两天准备把板子改好带过去入库; 2.上次防爆检测人员说防爆部分包括电池都合格...

姬海超
2015/04/28
6
0
三、npm 创建项目

原文来自:https://dkvirus.gitbooks.io/-npm/content/di-sanzhang-npm-chuang-jian-xiang-mu.html 上一节已经介绍了 npm 的安装,这一节来介绍 npm 的使用。首先使用 npm 创建一个项目。 3....

嘘别吵_4d1c
2017/12/09
0
0
真▪一行代码完成从前端代码build到部署线上

在经历了6,7个项目同时开工,频繁发布测试 ,不得不学会一点偷懒的小技巧来提高效率了,所以这篇文章要讲的就是如何更加优化发布流程。 工作以来,经历了build后,然后用上传服务器完成部署。...

TimeFly
2018/08/10
0
0
好程序员web前端分享Nodejs学习笔记之Stream模块 

好程序员web前端分享Nodejs学习笔记之Stream模块   一,开篇分析   流是一个抽象接口,被 Node 中的很多对象所实现。比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流。流是可读...

好程序员IT
05/17
0
0

没有更多内容

加载失败,请刷新页面

加载更多

买卖股票的最佳时机-LeetCode

给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。 如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。 注意你不能在买入股票前卖...

事儿爹
31分钟前
1
0
mysql根据分隔符进行字段拆分

虽然已经有很多类似的写法,我这里还是自己写一写,有些分隔符分出的列数是不固定的,这时候怎么根据分隔符拆分出多列呢 insert into tpems.sp_questions_bank (id, title, option_a, option...

无知的小狼
40分钟前
0
0
vue+antdesign模态框实现父子组件之间传值

vue中实现父子组件间单向数据流传递比较方便,子组件通过prop接收父组件传递过来的值,父组件通过监听子组件emit出的函数接收子组件传递的值。 1、父组件向子组件传值(prop) 父组件先绑定值...

苇草66083
42分钟前
4
0
JDBC直接读取properties,连接数据库的util类

完整代码如下:拼凑的代码,源代码不知道从哪来的了。见谅! 使用的话直接在自己的service或dao注入 package com.javafast.util;import com.alibaba.druid.pool.DruidDataSource;import co...

S三少S
55分钟前
11
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部