全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Node.js中流(stream)的使用方法示例

前言

本文主要给大家介绍了关于Node.js 流(stream)的使用方法,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍:

流是基于事件的API,用于管理和处理数据,而且有不错的效率.借助事件和非阻塞I/O库,流模块允许在其可用的时候动态处理,在其不需要的时候释放掉.

使用流的好处

举一个读取文件的例子:

使用fs.readFileSync同步读取一个文件,程序会被阻塞,所有的数据都会被读取到内存中.

换用fs.readFile读取文件,程序不会被阻塞,但是所有的数据依旧会被一次性全部被读取到内存中.

当处理大文件压缩,归档,媒体文件和巨大的日志文件的时候,内存使用就成了问题,在这种情况下,流的优势就体现出来了.

流被设计为异步的方式.相比将剩余的文件数据一次性读进内存,还是值得读取一个缓冲区,期望的操作将会被执行,而且结果会被写到输出流.

流的分类

  • stream.Readable---用于在I/O上获取数据
  • stream.Writable---用于在输出的目标写入数据
  • stream.Duplex---一个可读可写的流,例如网络连接
  • stream.Transform---一个会以某种方式修改数据的双工流

创建一个可读流

方法一

var Stream = require('stream')
var readable = Stream.Readable();
var source = ['a', 'b', 'c'];
readable._read = function() {
 this.push(source.shift() || null);
}
readable.pipe(process.stdin);

方法二

var Readable = require('stream').Readable;

function MyStream(options) {
 Readable.call(this, options);
}

MyStream.prototype = Object.create(Readable.prototype, {
 constructor: { value: MyStream }
});

MyStream.prototype._read = function() {
 this.push("hello");
 this.push(null);
}

var streams = new MyStream();

streams.pipe(process.stdin);

方法三

var stream = require('stream');
var util = require('util');

function MyStream(options) {
 stream.Readable.call(this, options);
}

MyStream.prototype._read = function(size) {
 this.push('hello');
 this.push(null);
}

util.inherits(MyStream, stream.Readable);

var streams = new MyStream();

streams.pipe(process.stdout);

可读流的一些概念

可读流是 对提供数据的源头的抽象

可读流的实例

  • http responses,on the client
  • http requests, on the server
  • fs read stream
  • zlib streams
  • crypto streams
  • TCP sockets
  • child process stdout and stderr
  • process.stdin

可读流的模式

可读流有两种工作模式:flowing和paused.

在flowing模式下,可读流自动从系统底层读取数据,并通过EventEmitter接口的事件尽快将数据提供给应用.

可读流在创建的时候都是处在paused模式.

可读流可以在两种模式下切换.

处于paused模式可读流,可以通过下面三种途径切换到flowing模式:

  • 监听'data'事件.
  • 调用stream.resume()方法.
  • 调用stream.pipe()方法将数据发送到Writable

处于flowing模式可读流,可以通过下面两种途径切换到paused模式:

  • 如果不存在管道目标,可以通过调用stream.pause()方法实现
  • 如果存在管道目标,可以通过取消'data'事件监听,并调用stream.unpipe()方法移除所有管道来实现

可读流事件

可读流提供了以下事件:

  • 'close'事件,事件将在流或底层资源关闭后触发,但不是所有的流都会触发该事件.
  • 'data'事件,data事件将会在流将数据传递给消费者时触发.当流转换到flowing模式时会触发该事件.
  • 'end'事件,end事件只有在数据被完全消费后才会触发.
  • 'error'事件,error事件会在底层系统内部出错从而不能产生数据,或当流的实现试图传递错误数据时发生.
  • 'readble'事件,readable事件将在流中有数据可供读取时触发.

总结

以上就是这篇文章的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# nodejs  #   # node  # 可读流  # fs  # 读取文件流  # Node.js中的流(Stream)的作用详解  # node.js同步/异步文件读写-fs  # Stream文件流操作实例详解  # Node.js数据流Stream之Duplex流和Transform流用法  # Node.js数据流Stream之Readable流和Writable流用法  # node.js中stream流中可读流和可写流的实现与使用方法实例分析  # node.js使用stream模块实现自定义流示例  # Node.js中你不可不精的Stream(流)  # Node.js中的流(Stream)介绍  # Node.js 中的流Stream模块简介及如何使用流进行数据处理  # 可以通过  # 将在  # 两种  # 会在  # 双工  # 切换到  # 都是  # 将会  # 不需要  # 模式下  # 才会  # 中有  # 给大家  # 不存在  # 三种  # 可供  # 写到  # 发送到  # 这篇文章  # 有两种 


相关文章: c# 服务器GC和工作站GC的区别和设置  如何快速搭建高效香港服务器网站?  logo在线制作免费网站在线制作好吗,DW网页制作时,如何在网页标题前加上logo?  免费视频制作网站,更新又快又好的免费电影网站?  linux top下的 minerd 木马清除方法  ,在苏州找工作,上哪个网站比较好?  如何在七牛云存储上搭建网站并设置自定义域名?  全景视频制作网站有哪些,全景图怎么做成网页?  建站VPS选购需注意哪些关键参数?  如何在IIS7上新建站点并设置安全权限?  python的本地网站制作,如何创建本地站点?  天河区网站制作公司,广州天河区如何办理身份证?需要什么资料有预约的网站吗?  如何通过智能用户系统一键生成高效建站方案?  javascript中的try catch异常捕获机制用法分析  XML的“混合内容”是什么 怎么用DTD或XSD定义  简单实现Android文件上传  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  ,南京靠谱的征婚网站?  建站之星如何防范黑客攻击与数据泄露?  实例解析Array和String方法  高防服务器租用首荐平台,企业级优惠套餐快速部署  深圳 网站制作,深圳招聘网站哪个比较好一点啊?  如何快速搭建FTP站点实现文件共享?  台州网站建设制作公司,浙江手机无犯罪记录证明怎么开?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  如何快速查询网站的真实建站时间?  建站org新手必看:2024最新搭建流程与模板选择技巧  公司网站制作价格怎么算,公司办个官网需要多少钱?  代刷网站制作软件,别人代刷火车票靠谱吗?  如何通过二级域名建站提升品牌影响力?  如何注册花生壳免费域名并搭建个人网站?  建站主机类型有哪些?如何正确选型  5种Android数据存储方式汇总  七夕网站制作视频,七夕大促活动怎么报名?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  如何高效利用亚马逊云主机搭建企业网站?  学校建站服务器如何选型才能满足性能需求?  ,怎么用自己头像做动态表情包?  建站主机如何安装配置?新手必看操作指南  宝塔新建站点为何无法访问?如何排查?  如何在景安云服务器上绑定域名并配置虚拟主机?  大连 网站制作,大连天途有线官网?  网站按钮制作软件,如何实现网页中按钮的自动点击?  如何自定义建站之星模板颜色并下载新样式?  如何在宝塔面板中创建新站点?  如何在建站宝盒中设置产品搜索功能?  如何快速启动建站代理加盟业务?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  宝盒自助建站智能生成技巧:SEO优化与关键词设置指南 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。