前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >NodeJS Stream入门 🦺

NodeJS Stream入门 🦺

作者头像
德育处主任
发布2022-08-30 14:31:25
4620
发布2022-08-30 14:31:25
举报
文章被收录于专栏:前端数据可视化

Stream 是一个概念,翻译成中文就是 “流” 的意思。它并非 NodeJS 独有。

本文就用 NodeJS 举例说明 Stream

Stream 简介

在传输大文件、视频、音频时,通常是分段传输的,可以把这个概念粗略的理解成 Stream

Stream 的中文意思是 “流” ,我在网上找了个图很好的讲明这个东西。

传多少过来就接多少,而这个传输过程我们使用 NodeJS 时是不需要关心的,因为 NodeJS 提供了对应的方法来处理。

《NodeJS http请求》 中讲到的 POST 方法,其实也用了这个概念。

Stream用法

我使用 复制文件内容 为例子说明 Stream

如果文件内容很少,我们是可以一次复制完的。但如果文件内容很多,最好就使用 “分包” 复制的方式。而这些 NodeJS 都为我们处理好了。

我准备了3个文件,它们分别是 index.jsdata.txtdata-backup.txt

  • index.js 是编写 JS 操作代码的文件
  • data.txt 是数据文件
  • data-backup.txt 是备份数据的文件,默认为空

data.txt 文件内容

代码语言:javascript
复制
123
456
789
0
复制代码

只有这10个数字

index.js 文件内容

代码语言:javascript
复制
const fs = require('fs')
const path = require('path')

const fileName1 = path.resolve(__dirname, 'data.txt')
const fileName2 = path.resolve(__dirname, 'data-backup.txt')

const readStream = fs.createReadStream(fileName1)
const writeStream = fs.createWriteStream(fileName2)

readStream.pipe(writeStream)

let count = 0

readStream.on('data', chunk => {
  console.log(`第 ${++count} 次传输`)
  console.log(chunk.toString())
})

readStream.on('end', () => {
  console.log('复制完成')
})
复制代码

解析:

  • 首先引入 fspath 模块,可对文件进行操作
  • 获取 data.txtdata-backup.txt 文件,并分别赋值给 fileName1fileName2
  • 使用 pipe 方法,将 data.txt 的内容流向 data-backup.txt
  • 使用 count 计算分包数量
  • 使用 on - data 来监听数据传输的过程
  • 使用 on - end 来监听数据传输完成

此时运行 index.js ,控制台就会输出

代码语言:javascript
复制
第 1 次传输
123
456
789
0
复制完成
复制代码

在内容比较少时,看不出 Stream 的作用。

但如果此时让 data.txt 内容变多,比如里面有10万个单词。那就能看出 Stream 的作用了。

VS Code 中,将 data.txt 的语言模式改成 HTML

然后输入 lorem100000 然后按回车,就能自动帮输入10万个单词。 lorem 后面加的数字就是要输入的单词书。

按下回车后

保存 data.txt ,然后再执行 index.js

此时打开控制台就可以看到分包的情况了。

以上就是 Stream 的简单介绍。

总结

Stream 可以理解为分包,“流” 的意思就是一点点流过来,而不是一次把所有搬过来。

你可以想象一下搬家的情况,如果你在一个地方生活了一段时间,生活用品、家具各种东西都多起来后,基本不可能一次把所有东西都搬走。通常你需要把东西一份份打包好,然后一份份搬到楼下,再搬上车运走。这就是 Stream 的概念。

再比如电视直播,如果把直播内容都录好,再一次过打包发送到你的客户端,那就不可能做到直播了对吧。通常都是录多少就发送多少。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-06-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Stream 简介
  • Stream用法
  • 总结
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档