全网整合营销服务商

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

免费咨询热线: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模块简介及如何使用流进行数据处理  # 可以通过  # 将在  # 两种  # 会在  # 双工  # 切换到  # 都是  # 将会  # 不需要  # 模式下  # 才会  # 中有  # 给大家  # 不存在  # 三种  # 可供  # 写到  # 发送到  # 这篇文章  # 有两种 


相关文章: nginx修改上传文件大小限制的方法  开源网站制作软件,开源网站什么意思?  如何在IIS中新建站点并配置端口与物理路径?  公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?  制作营销网站公司,淘特是干什么用的?  婚礼视频制作网站,学习*后期制作的网站有哪些?  宝塔面板如何快速创建新站点?  Python路径拼接规范_跨平台处理说明【指导】  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  高防服务器如何保障网站安全无虞?  车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?  如何通过.red域名打造高辨识度品牌网站?  C++如何编写函数模板?(泛型编程入门)  如何在景安服务器上快速搭建个人网站?  制作网站的公司有哪些,做一个公司网站要多少钱?  建站168自助建站系统:快速模板定制与SEO优化指南  建站之星下载版如何获取与安装?  制作充值网站的软件,做人力招聘为什么要自己交端口钱?  宁波免费建站如何选择可靠模板与平台?  ,交易猫的商品怎么发布到网站上去?  php json中文编码为null的解决办法  如何快速搭建响应式可视化网站?  整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?  如何通过虚拟主机空间快速建站?  建站之星上传入口如何快速找到?  怎么将XML数据可视化 D3.js加载XML  如何基于云服务器快速搭建网站及云盘系统?  html制作网站的步骤有哪些,iapp如何添加网页?  5种Android数据存储方式汇总  linux top下的 minerd 木马清除方法  如何用腾讯建站主机快速创建免费网站?  如何通过可视化优化提升建站效果?  C#如何序列化对象为XML XmlSerializer用法  建站之星导航配置指南:自助建站与SEO优化全解析  c# Task.ConfigureAwait(true) 在什么场景下是必须的  在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  建站之星客服服务时间及联系方式如何?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)  如何快速搭建高效WAP手机网站吸引移动用户?  建站之星安装提示数据库无法连接如何解决?  齐河建站公司:营销型网站建设与SEO优化双核驱动策略  免费视频制作网站,更新又快又好的免费电影网站?  常州企业建站如何选择最佳模板?  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  保定网站制作方案定制,保定招聘的渠道有哪些?找工作的人一般都去哪里看招聘信息?  如何通过远程VPS快速搭建个人网站?  制作旅游网站html,怎样注册旅游网站? 

您的项目需求

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