Node.js中流(stream)的使用方法示例
发布时间 - 2026-01-11 02:21:57 点击率:次前言

本文主要给大家介绍了关于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模块简介及如何使用流进行数据处理
# 可以通过
# 将在
# 两种
# 会在
# 双工
# 切换到
# 都是
# 将会
# 不需要
# 模式下
# 才会
# 中有
# 给大家
# 不存在
# 三种
# 可供
# 写到
# 发送到
# 这篇文章
# 有两种
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python并发异常传播_错误处理解析【教程】
Laravel Pest测试框架怎么用_从PHPUnit转向Pest的Laravel测试教程
百度输入法ai组件怎么删除 百度输入法ai组件移除工具
教你用AI润色文章,让你的文字表达更专业
如何在浏览器中启用Flash_2025年继续使用Flash Player的方法【过时】
Laravel项目如何进行性能优化_Laravel应用性能分析与优化技巧大全
Laravel Eloquent访问器与修改器是什么_Laravel Accessors & Mutators数据处理技巧
Laravel如何使用Eloquent进行子查询
PHP 500报错的快速解决方法
Python函数文档自动校验_规范解析【教程】
如何在云虚拟主机上快速搭建个人网站?
nodejs redis 发布订阅机制封装实现方法及实例代码
如何快速上传建站程序避免常见错误?
如何在腾讯云服务器快速搭建个人网站?
中山网站制作网页,中山新生登记系统登记流程?
如何选择可靠的免备案建站服务器?
Laravel如何发送邮件_Laravel Mailables构建与发送邮件的简明教程
利用 Google AI 进行 YouTube 视频 SEO 描述优化
如何在局域网内绑定自建网站域名?
Win11任务栏卡死怎么办 Windows11任务栏无反应解决方法【教程】
Laravel Admin后台管理框架推荐_Laravel快速开发后台工具
Laravel如何创建自定义Facades?(详细步骤)
Gemini怎么用新功能实时问答_Gemini实时问答使用【步骤】
Laravel Eloquent:优雅地将关联模型字段扁平化到主模型中
EditPlus中的正则表达式 实战(2)
如何在阿里云完成域名注册与建站?
如何在 Go 中优雅地映射具有动态字段的 JSON 对象到结构体
如何快速搭建高效可靠的建站解决方案?
如何快速建站并高效导出源代码?
Laravel如何使用Service Provider注册服务_Laravel服务提供者配置与加载
大连企业网站制作公司,大连2025企业社保缴费网上缴费流程?
图片制作网站免费软件,有没有免费的网站或软件可以将图片批量转为A4大小的pdf?
Win11怎么关闭专注助手 Win11关闭免打扰模式设置【操作】
JS中对数组元素进行增删改移的方法总结
个人网站制作流程图片大全,个人网站如何注销?
微博html5版本怎么弄发超话_超话进入入口及发帖格式要求【教程】
文字头像制作网站推荐软件,醒图能自动配文字吗?
公司门户网站制作流程,华为官网怎么做?
千库网官网入口推荐 千库网设计创意平台入口
如何在Windows服务器上快速搭建网站?
如何撰写建站申请书?关键要点有哪些?
Laravel的.env文件有什么用_Laravel环境变量配置与管理详解
Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何在IIS管理器中快速创建并配置网站?
黑客入侵网站服务器的常见手法有哪些?
如何在建站宝盒中设置产品搜索功能?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
如何快速完成中国万网建站详细流程?

