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 相关文章推荐
一个很酷的拖动层的js类,兼容IE及Firefox
Jun 23 Javascript
jQuery插件 tabBox实现代码
Feb 09 Javascript
浅谈JavaScript函数参数的可修改性问题
Dec 05 Javascript
Jquery 获取对象的几种方式介绍
Jan 17 Javascript
javascript 获取元素样式必杀技
May 04 Javascript
基于jQuery实现动态数字展示效果
Aug 12 Javascript
微信小程序 ecshop地址三级联动实现实例代码
Feb 28 Javascript
原生js更改css样式的两种方式
Mar 15 Javascript
Koa2微信公众号开发之本地开发调试环境搭建
May 16 Javascript
解决Vue开发中对话框被遮罩层挡住的问题
Nov 26 Javascript
详解axios中封装使用、拦截特定请求、判断所有请求加载完毕)
Apr 09 Javascript
移动端 Vue+Vant 的Uploader 实现上传、压缩、旋转图片功能
Jun 10 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
文章推荐系统(二)
2006/10/09 PHP
php IP及IP段进行访问限制的代码
2008/12/17 PHP
页面乱码问题的根源及其分析
2013/08/09 PHP
php调用shell的方法
2014/11/05 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
thinkPHP订单数字提醒功能的实现方法
2016/12/01 PHP
JQuery 自定义CircleAnimation,Animate方法学习笔记
2011/07/10 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
javascript制作网页图片上实现下雨效果
2015/02/26 Javascript
javascript自定义右键弹出菜单实现方法
2015/05/25 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
快速移动鼠标触发问题及解决方法(ECharts外部调用保存为图片操作及工作流接线mouseenter和mouseleave)
2016/08/29 Javascript
jquery实现点击页面回到顶部
2016/11/23 Javascript
JavaScript模拟实现封装的三种方式及写法区别
2017/10/27 Javascript
JavaScript中Object值合并方法详解
2017/12/22 Javascript
Vue.js 使用v-cloak后仍显示变量的解决方法
2018/11/19 Javascript
setTimeout与setInterval的区别浅析
2019/03/23 Javascript
Vue.js轮播图走马灯代码实例(全)
2019/05/08 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
wxpython 学习笔记 第一天
2009/03/16 Python
30分钟搭建Python的Flask框架并在上面编写第一个应用
2015/03/30 Python
python递归查询菜单并转换成json实例
2017/03/27 Python
python读取和保存视频文件
2018/04/16 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
Python Request类源码实现方法及原理解析
2020/08/17 Python
StubHub巴西:购买和出售您的门票
2016/07/22 全球购物
土耳其时尚潮流在线购物网站:Trendyol
2017/10/10 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
学生干部学习的自我评价
2014/02/18 职场文书
优秀德育工作者事迹材料
2014/05/07 职场文书
法定授权委托证明书
2014/09/27 职场文书
迎新年主持词
2015/07/06 职场文书
Oracle 多表查询基本语法实例
2022/04/18 Oracle
A22国内电台短波广播频率表
2022/05/10 无线电
Java结构型设计模式之组合模式详解
2022/09/23 Java/Android