位置: 编程技术 - 正文

浅析Node.js 中 Stream API 的使用(nodejs stdin)

编辑:rootadmin

推荐整理分享浅析Node.js 中 Stream API 的使用(nodejs stdin),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:nodejs tostring,nodejs-lts,nodejs tostring,nodejs+ts,nodejs setinterval,nodejs setimmediate,nodejs stdin,nodejs stdout,内容如对您有帮助,希望把文章链接给更多的朋友!

本文由浅入深给大家介绍node.js stream api,具体详情请看下文吧。

基本介绍

在 Node.js 中,读取文件的方式有两种,一种是用 fs.readFile ,另外一种是利用 fs.createReadStream 来读取。

fs.readFile 对于每个 Node.js 使用者来说最熟悉不过了,简单易懂,很好上手。但它的缺点是会先将数据全部读入内存,一旦遇到大文件的时候,这种方式读取的效率就非常低下了。

而 fs.createReadStream 则是通过 Stream 来读取数据,它会把文件(数据)分割成小块,然后触发一些特定的事件,我们可以监听这些事件,编写特定的处理函数。这种方式相对上面来说,并不好上手,但它效率非常高。

事实上, Stream 在 Node.js 中并非仅仅用在文件处理上,其他地方也可以看到它的身影,如 process.stdin/stdout , http , tcp sockets , zlib , crypto 等都有用到。

本文是我学习 Node.js 中的 Stream API 中的一点总结,希望对大家有用。

特点

基于事件通讯

可以通过 pipe 来连接流

种类

Readable Stream 可读数据流

Writeable Stream 可写数据流

Duplex Stream 双向数据流,可以同时读和写

Transform Stream 转换数据流,可读可写,同时可以转换(处理)数据

事件

可读数据流的事件

readable 数据向外流时触发

data 对于那些没有显式暂停的数据流,添加data事件监听函数,会将数据流切换到流动态,尽快向外提供数据

end 读取完数据时触发。注意不能和 writeableStream.end() 混淆,writeableStream 并没有 end 事件,只有 .end() 方法

close 数据源关闭时触发

error 读取数据发生错误时触发

可写数据流的事件

drain writable.write(chunk) 返回 false 之后,缓存全部写入完成,可以重新写入时就会触发

finish 调用 .end 方法时,所有缓存的数据释放后触发,类似于可读数据流中的 end 事件,表示写入过程结束

pipe 作为 pipe 目标时触发

浅析Node.js 中 Stream API 的使用(nodejs stdin)

unpipe 作为 unpipe 目标时触发

error 写入数据发生错误时触发

状态

可读数据流有两种状态: 流动态 和 暂停态 ,改变数据流状态的方法如下:

暂停态 -> 流动态

添加 data 事件的监听函数

调用 resume 方法

调用 pipe 方法

注意:如果转为流动态时,没有 data 事件的监听函数,也没有 pipe 方法的目的地,那么数据将遗失。

流动态 -> 暂停态

不存在 pipe 方法的目的地时,调用 pause 方法

存在 pipe 方法的目的地时,移除所有 data 事件的监听函数,并且调用 unpipe 方法,移除所有 pipe 方法的目的地

注意:只移除 data 事件的监听函数,并不会自动引发数据流进入「暂停态」。另外,存在 pipe 方法的目的地时,调用 pause 方法,并不能保证数据流总是处于暂停态,一旦那些目的地发出数据请求,数据流有可能会继续提供数据。

用法

读写文件

更多用法

可以参考一下 ,进去示例网站之后直接点 add stream 就能看到结果了。

常见坑

用 rs.pipe(ws) 的方式来写文件并不是把 rs 的内容 append 到 ws 后面,而是直接用 rs 的内容覆盖 ws 原有的内容

已结束/关闭的流不能重复使用,必须重新创建数据流

pipe 方法返回的是目标数据流,如 a.pipe(b) 返回的是 b,因此监听事件的时候请注意你监听的对象是否正确

如果你要监听多个数据流,同时你又使用了 pipe 方法来串联数据流的话,你就要写成:

data

常用类库

event-stream 用起来有函数式编程的感觉,个人比较喜欢

awesome-nodejs#streams 由于其他 stream 库我都没用过,所以有需求的就直接看这里吧

以上内容是小编给大家介绍的Node.js 中 Stream API 的使用,希望大家喜欢。

Nodejs实战心得之eventproxy模块控制并发 目标建立一个lesson4项目,在其中编写代码。代码的入口是app.js,当调用nodeapp.js时,它会输出CNode(

node.js回调函数之阻塞调用与非阻塞调用 首先,node.js作为javascript运行平台,它采用了事件驱动和异步编程的方式,通过事件注册和异步函数,开发人员可以提高资源利用率,服务器的性能也能

node.js抓取并分析网页内容有无特殊内容的js文件 nodejs获取网页内容绑定data事件,获取到的数据会分几次相应,如果想全局内容匹配,需要等待请求结束,在end结束事件里把累积起来的全局数据进行操

标签: nodejs stdin

本文链接地址:https://www.jiuchutong.com/biancheng/370632.html 转载请保留说明!

上一篇:浅谈node.js中async异步编程(node.js axios)

下一篇:Nodejs实战心得之eventproxy模块控制并发(node.js 10实战)

  • 小规模30万免增值税1点怎么申报税款
  • 注册税务师的报名条件、时间及考试
  • 计提业务提成怎么做账
  • 可以先抵扣下个月的进项票吗
  • 实际上缴税费总额怎么算
  • 附加税是当月计算吗
  • 支付宝收据在哪儿看
  • 外商投资企业清算审计报告
  • 商品溢余做销售的会计分录怎么写?
  • 货币的时间价值名词解释
  • 企业发票税收编码是什么
  • 个人所得税变动率计算公式为多少
  • 行政单位租个人房子能用收据下账吗
  • 税种申报表样表
  • 文化事业建设税计算方法
  • 固定资产机器设备使用年限
  • 未确认收入的增值税怎么记账
  • 企业所得税怎么征收
  • 收取赔偿金开具什么发票
  • 社保缴费申报表文件
  • 显卡功耗天梯图2023最新版
  • 苹果电脑mac设备在哪里
  • 工厂的绿化费进项税额
  • 房产税的征收范围为
  • 购买电子承兑差额怎么算
  • 公司总部固定资产折旧
  • 民办学校的财务制度
  • kb4539601安装失败
  • 向银行借入长期借款50万元
  • el-tree方法
  • php面向对象编程学生类
  • 进口的应税消费品,于报关进口时缴纳消费税
  • 企业所得税税前扣除凭证(发票)风险提示反馈
  • 合同负债和预收负债的区别
  • 三维点云识别
  • PHP+mysql+ajax轻量级聊天室实现方法详解
  • 电子银行回单可以导出吗
  • 利息收入可以冲减开发成本的法律依据
  • 飞机票电子发票能报销吗
  • 一个月可以勾选多少进项税额
  • java 访问者模式
  • python之sqlalchemy创建表的实例详解
  • PostgreSQL分区表(partitioning)应用实例详解
  • 什么叫境外所得
  • 现金流量表中的现金流量包括哪些
  • 费用报销单的经办人是什么意思
  • 小规模纳税人减免增值税会计处理
  • 公司优秀党员奖章
  • 差旅费税前扣除政策
  • 多用途卡的监管机构是
  • 增值税防伪税控系统
  • 收到政府补贴如何入账
  • 企业其他应收款余额非常大的原因
  • 残疾人保障金必须交吗
  • 企业建账的流程是什么
  • 税务会计应该设什么岗位
  • Mysql执行sql文件
  • SQL server 字符串函数
  • mysql 5.7.13 winx64安装配置教程
  • windows 开始
  • mac系统命名规律
  • centos 安装
  • ubuntu如何下载
  • win8系统没有无线网络连接
  • win8开机启动项
  • Linux服务器架设指南百度网盘
  • win8和win10双系统安装教程
  • 如何打开win7
  • win7专用字符编辑程序的使用方法
  • win7系统命令大全
  • javascript标题
  • samsung s3 gt-19300 开发 键盘回车事件
  • 怎么通过微信号查到对方的手机号码
  • shell自定义函数以及使用
  • linux shell if -e
  • js实现继承的几种方式详述(推荐)
  • 税务举报被泄漏怎么办
  • 丹阳税务局一分局领导
  • 小规模纳税人需要进项票吗
  • 个体工商户税收起征点是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设