node.js 利用流实现读写同步,边读边写的方法


Posted in Javascript onSeptember 11, 2017

如下所示:

//10个数 10个字节,每次读4b,写1b
let fs=require("fs");
function pipe(source,target) {
  //先创建可读流,再创建可写流
  //先读一次,rs.on(data)
  //将读到的类容写入目标中 ,返回布尔值,如果是ture,继续写,默认情况应该是false,暂停读取
  //ws.on('drain'),抽干后,回复读取
  //监听读取文件完毕后,关闭读取rs.on('end')

  let rs=fs.createReadStream(source,{highWaterMark:4});
  let ws=fs.createWriteStream(target,{highWaterMark:1});

  rs.on('data',function (chunk) { //chunk是buffer类型

    if(ws.write(chunk)===false){
      //写不下,停止读取
      rs.pause()
    }

  });
  ws.on('drain',function () {
    //每次写的内存干了就恢复读取
    console.log("111");
    rs.resume() //恢复读取
  });
  rs.on('end',function (chunk) {
    ws.end();
  })

}
pipe('./1.txt','./3.txt')

上面这种写法比较繁琐,大家看完后,忘记就行

node.js提供给我们内置方法pipe

//10个数 10个字节,每次读4b,写1b
let fs=require("fs");
function pipe(source,target) {

  let rs=fs.createReadStream(source,{highWaterMark:4});
  let ws=fs.createWriteStream(target,{highWaterMark:1});
  //可读流到可写流,异步操作,可以保证内存不会被淹没,读一点,写一点
  // 如果想看文件类容,使用readFile

  rs.pipe(ws);
}
pipe('./1.txt','./4.txt')

直接将读取的流操作到写入流中,还是异步操作

以上这篇node.js 利用流实现读写同步,边读边写的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jquery DOM操作 基于命令改变页面
May 06 Javascript
js实现touch移动触屏滑动事件
Apr 17 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
May 21 Javascript
angular.js之路由的选择方法
Sep 24 Javascript
jQuery插件HighCharts实现的2D回归直线散点效果示例【附demo源码下载】
Mar 09 Javascript
vue基于Vue2.0和高德地图的地图组件实例
Apr 28 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
May 12 Javascript
ES7中利用Await减少回调嵌套的方法详解
Nov 01 Javascript
新手快速入门JavaScript装饰者模式与AOP
Jun 24 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
Oct 12 Javascript
Vue简单实现原理详解
May 07 Javascript
Three.js实现雪糕地球的使用示例详解
Jul 07 Javascript
checkbox:click事件触发span元素内容改变的方法
Sep 11 #Javascript
Node.js 使用流实现读写同步边读边写功能
Sep 11 #Javascript
node.js 核心http模块,起一个服务器,返回一个页面的实例
Sep 11 #Javascript
简单谈谈JS中的正则表达式
Sep 11 #Javascript
详解Vue双向数据绑定原理解析
Sep 11 #Javascript
基于DOM节点删除之empty和remove的区别(详解)
Sep 11 #Javascript
在原生不支持的旧环境中添加兼容的Object.keys实现方法
Sep 11 #Javascript
You might like
浅析memcache启动以及telnet命令详解
2013/06/28 PHP
推荐5款跨平台的PHP编辑器
2014/12/25 PHP
php输出全球各个时区列表的方法
2015/03/31 PHP
PHP大神的十大优良习惯
2016/09/14 PHP
Ajax中的JSON格式与php传输过程全面解析
2017/11/14 PHP
JavaScript 函数replace深入了解
2013/03/14 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
jquery js 获取时间差、时间格式具体代码
2013/06/05 Javascript
JQuery判断子iframe何时加载完成解决方案
2013/08/20 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
用js的document.write输出的广告无阻塞加载的方法
2014/06/05 Javascript
chrome调试javascript详解
2015/10/21 Javascript
jQuery中inArray方法注意事项分析
2016/01/25 Javascript
Three.js学习之几何形状
2016/08/01 Javascript
vue货币过滤器的实现方法
2017/04/01 Javascript
jquery replace方法去空格
2017/05/08 jQuery
jQuery图片加载失败替换默认图片方法汇总
2017/11/29 jQuery
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
vue2.0 移动端实现下拉刷新和上拉加载更多的示例
2018/04/23 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
JavaScript接口实现方法实例分析
2020/05/16 Javascript
Element Rate 评分的使用方法
2020/07/27 Javascript
JS代码简洁方式之函数方法详解
2020/07/28 Javascript
js用正则表达式筛选年月日的实例方法
2021/01/04 Javascript
[01:37]DOTA2超级联赛专访ChuaN 传奇般的电竞之路
2013/06/19 DOTA
python中遍历文件的3个方法
2014/09/02 Python
Python函数式编程指南(三):迭代器详解
2015/06/24 Python
python去除字符串中的换行符
2017/10/11 Python
python中实现字符串翻转的方法
2018/07/11 Python
Python爬取视频(其实是一篇福利)过程解析
2019/08/01 Python
Django vue前后端分离整合过程解析
2020/11/20 Python
css3模拟jq点击事件的实例代码
2017/07/06 HTML / CSS
中专毕业生自荐信
2013/11/16 职场文书
党员的自我评价范文
2014/01/02 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
浅谈pytorch中的dropout的概率p
2021/05/27 Python