一文大白话讲清楚Node中的流stream

news/2025/1/15 5:36:01/

文章目录

  • 一文大白话讲清楚Node中的stream
  • 1. 啥是stream
  • 2. stream的种类
  • 3.应用场景
    • 3.1 双工babel
    • 3.2 文件操作
    • 3.3 打包工具的实现

stream_1">一文大白话讲清楚Node中的stream

stream_2">1. 啥是stream

  • 先举个例子,你要把大桶水从A搬到B,如果一次性搬过去,很累吧,而且容易出事故。
  • 怎么办,接一个馆子,让水从A到B
  • 这样不仅容易实现而且好控制
  • node的stream就是这个原理
  • stream是一种数据传输手段,是端到端的信息交换方式,而且是有序的,是逐块读写的,这个块就是Buffer
  • 不懂buffer的看我这篇文章
  • 一文大白话讲清楚Node中的buffer
  • stream的好处是,他不像传统程序那样,一次讲一个文件读入内存,而是逐块读取数据,处理内容,而不是将其全部保存在内存中。
  • stream由三部分构成
  • 源数据source
  • 目的地dest
  • 和运输管道pipe
  • 跟我们上面讲的运水的事一毛一样。
  • 他的基本语法是source.pipe(dest),就是源数据利用管道,传输到dest
    在这里插入图片描述

stream_19">2. stream的种类

  • 说白了就是stream向,是往目的地,还是往源数据,还是双向都能

2.1 可写

  • 可写入的数据,就是往进去。比如fs.createWriteStream,可以使用将数据写入文件

2.2 可读

  • 可读取数据的,就是往出去,比如fs.createReadStream,可以从文件读取内容

2.3 双工

  • 既可读有可写的,就是又能往进去,同时也能往出去,比如net。Sokect

2.4 转换

  • 可以在数据写入和读取时修改或转换数据的。比如,在文件压缩站时,可以向文件写入压缩数据,并从文件中读取解压数据

3.应用场景

3.1 双工babel

  • 我们在babel时一遍输入ES6代码,一边导出ES5代码

3.2 文件操作

  • 我们通过数据实现两个文件的拷贝,test.txt内容’test.txt’,newtest.txt内容为空,把test内容通过拷贝到newtest
const fs=require('fs')
const readStream=fs.createReadStream('test.txt')
const writeStream=fs.createWriteStream('newtest.txt')
readStream.pipe(writeStream)
readStream.on('end',()=>{console.log(fs.readFile('ewstest.txt','utf8'))//test.txt
})

3.3 打包工具的实现

  • 像gulp这种打包工具底层都离不开stream

http://www.ppmy.cn/news/1563233.html

相关文章

基于YOLOv8与CGNet的鸟类智能识别系统 深度学习图像分类 鸟类目标检测与分类 图像特征提取 模型优化与应用 数据可视化(源码+指导+定制)

博主介绍: ✌我是阿龙,一名专注于Java技术领域的程序员,全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师,我在计算机毕业设计开发方面积累了丰富的经验。同时,我也是掘金、华为云、阿里云、InfoQ等平台…

改进萤火虫算法之八:量子萤火虫算法(Quantum-behaved Firfly Algorithm,QFA)

量子萤火虫算法(Quantum-behaved Firfly Algorithm,QFA)是对萤火虫算法的一种改进,旨在提升萤火虫个体的搜索能力。以下是对量子萤火虫算法的详细介绍: 一、萤火虫算法基础 萤火虫算法(Firefly Algorithm,FA)是一种基于群体智能的优化算法,由剑桥大学的Xin-She Yang在…

深入理解观察者模式 —— Qt信号槽机制的实现

观察者模式是一种行为型设计模式,允许一个对象(被观察者)状态发生变化时通知一组依赖它的对象(观察者),从而实现对象之间的解耦。在这篇文章中,我们将探讨如何用 C 和 Python 实现观察者模式&am…

EJB与微服务:Java的秘密武器

1.1 EJB(Enterprise JavaBeans) EJB是一种基于Java的企业级组件模型,主要用于构建大型、分布式和事务性的企业级应用程序。EJB在EJB容器中运行,该容器负责各种系统级服务,包括事务管理、安全性和并发控制。EJB的设计理…

微信小程序集成Vant Weapp移动端开发的框架

什么是Vant Weapp Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本。 官网地睛:介绍 - Vant Weapp (vant-ui.gith…

51单片机入门基础

目录 一、基础知识储备 (一)了解51单片机的基本概念 (二)掌握数字电路基础 (三)学习C语言编程基础 二、开发环境搭建 (一)硬件准备 (二)软件准备 三、…

移动应用安全:保护用户隐私与数据的关键解决方案

移动应用安全为何如此重要? 随着智能设备的普及和移动应用的快速增长,移动应用已成为人们日常生活的重要组成部分。然而,移动应用安全问题也日益严峻。用户隐私泄露、数据被盗、恶意软件攻击等问题给个人和企业都带来了巨大的风险。 移动应用…

对受控组件和非受控组件的理解?应用场景?

受控组件与非受控组件的理解与应用 在 React 中,组件可以通过两种方式管理表单元素的状态:受控组件和非受控组件。这两者在处理表单输入数据时有很大的区别,理解它们的应用场景和优劣对于开发者来说非常重要。 目录结构: 受控组…