stream流具体介绍 与 流操作—管道pipe

2024-03-25 17:12

本文主要是介绍stream流具体介绍 与 流操作—管道pipe,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、stream流具体介绍

Stream 是一个抽象接口,Node 中有很多对象实现了这个接口。所有的 Stream 对象都是 EventEmitter 的实例。例如,对http 服务器发起请求的request 对象就是一个 Stream,还有stdout(标准输出)

(1)Stream流的四种流类型:
  • Readable - 可读操作。

  • Writable - 可写操作。

  • Duplex - 可读可写操作.

  • Transform - 操作被写入数据,然后读出结果。

(2)Stream流的事件

1》data事件

从可读流中读取新数据时触发。data数据作为事件处理程序的第一个参数。需要注意的是,与其他事件处理程序不同,附加数据侦听器会产生副作用。当连接第一个数据侦听器时,我们的流将被取消暂停。

2》end事件

当可读流中没有数据时触发。

3》finish事件

当可写流结束且所有挂起的写入都已完成时发出。

4》error 事件

 在接收和写入过程中发生错误时触发。

5》close事件

通常在流完全关闭时发出,stream不一定会触发事件。

6》puse事件

用于暂停一个可读流。大部分情况我们可以忽略这个方法。

7》resume事件

用于重启一个可读流。

二、流操作—管道pipe

(1)未使用 Stream pipe 情况:

在 Nodejs 中 I/O 操作都是异步的,先用 util 模块的 promisify 方法将 fs.readFile 的 callback 形式转为 Promise 形式,这块代码看似没问题,但是它的体验不是很好,因为它是将数据一次性读入内存再进行的返回,当数据文件很大的时候也是对内存的一种消耗,因此不推荐它。

(2)使用 Stream pipe 情况:

使用stream就可以不需要把文件全部读取了再返回,而是一边读取一边返回,数据通过管道流动给客户端,真的减轻了服务器的压力

(3)管道pipe的使用

在 Node 应用程序中,可以使用 pipe() 方法将流连接在一起,该方法有两个参数:

  • 参数一:作为数据和目标的必需可写流
  • 参数二:用于传入选项的可选对象。

如果要将数据从一个文件传输到另一个文件,则使用管道的典型示例。

代码示例:

将我们c.txt里面的内容读取后通过管道pipe写入到e.txt里面:

const fs=require('fs');
// 1.创建可读和可写流
const rs=fs.createReadStream('./data/c.txt');
const ws=fs.createWriteStream('./data/e.txt');
// 2.建立管道
//将我们c.txt里面的内容读取后通过管道写入到e.txt里面
rs.pipe(ws);

这篇关于stream流具体介绍 与 流操作—管道pipe的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/845681

相关文章

Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单

《Springboot的ThreadPoolTaskScheduler线程池轻松搞定15分钟不操作自动取消订单》:本文主要介绍Springboot的ThreadPoolTaskScheduler线... 目录ThreadPoolTaskScheduler线程池实现15分钟不操作自动取消订单概要1,创建订单后

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont

使用JavaScript操作本地存储

《使用JavaScript操作本地存储》这篇文章主要为大家详细介绍了JavaScript中操作本地存储的相关知识,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下... 目录本地存储:localStorage 和 sessionStorage基本使用方法1. localStorage

使用JavaScript将PDF页面中的标注扁平化的操作指南

《使用JavaScript将PDF页面中的标注扁平化的操作指南》扁平化(flatten)操作可以将标注作为矢量图形包含在PDF页面的内容中,使其不可编辑,DynamsoftDocumentViewer... 目录使用Dynamsoft Document Viewer打开一个PDF文件并启用标注添加功能扁平化

JavaScript DOM操作与事件处理方法

《JavaScriptDOM操作与事件处理方法》本文通过一系列代码片段,详细介绍了如何使用JavaScript进行DOM操作、事件处理、属性操作、内容操作、尺寸和位置获取,以及实现简单的动画效果,涵... 目录前言1. 类名操作代码片段代码解析2. 属性操作代码片段代码解析3. 内容操作代码片段代码解析4.

SpringBoot使用Apache POI库读取Excel文件的操作详解

《SpringBoot使用ApachePOI库读取Excel文件的操作详解》在日常开发中,我们经常需要处理Excel文件中的数据,无论是从数据库导入数据、处理数据报表,还是批量生成数据,都可能会遇到... 目录项目背景依赖导入读取Excel模板的实现代码实现代码解析ExcelDemoInfoDTO 数据传输

Python使用asyncio实现异步操作的示例

《Python使用asyncio实现异步操作的示例》本文主要介绍了Python使用asyncio实现异步操作的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录1. 基础概念2. 实现异步 I/O 的步骤2.1 定义异步函数2.2 使用 await 等待异

python subprocess.run中的具体使用

《pythonsubprocess.run中的具体使用》subprocess.run是Python3.5及以上版本中用于运行子进程的函数,它提供了更简单和更强大的方式来创建和管理子进程,本文就来详细... 目录一、详解1.1、基本用法1.2、参数详解1.3、返回值1.4、示例1.5、总结二、subproce

MyBatis框架实现一个简单的数据查询操作

《MyBatis框架实现一个简单的数据查询操作》本文介绍了MyBatis框架下进行数据查询操作的详细步骤,括创建实体类、编写SQL标签、配置Mapper、开启驼峰命名映射以及执行SQL语句等,感兴趣的... 基于在前面几章我们已经学习了对MyBATis进行环境配置,并利用SqlSessionFactory核

Java操作xls替换文本或图片的功能实现

《Java操作xls替换文本或图片的功能实现》这篇文章主要给大家介绍了关于Java操作xls替换文本或图片功能实现的相关资料,文中通过示例代码讲解了文件上传、文件处理和Excel文件生成,需要的朋友可... 目录准备xls模板文件:template.xls准备需要替换的图片和数据功能实现包声明与导入类声明与