NodeJS stream入门

本文简介

点赞 + 关注 + 收藏 = 学会了


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

本文就用 NodeJS 举例说明 Stream



Stream 简介

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

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

NodeJS stream入门_第1张图片

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

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

Stream用法

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


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


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

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


data.txt 文件内容

123
456
789
0

只有这10个数字


index.js 文件内容

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 ,控制台就会输出

第 1 次传输
123
456
789
0
复制完成

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


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


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

NodeJS stream入门_第2张图片


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

NodeJS stream入门_第3张图片


按下回车后

NodeJS stream入门_第4张图片


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

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

NodeJS stream入门_第5张图片

以上就是 Stream 的简单介绍。



总结

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

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


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



推荐阅读

《NodeJS http请求》

《NodeJS 5分钟 连接MySQL 增删改查》

《NodeJS 操作cookie》

《NodeJS 5分钟 连接 Redis 读写操作》

《NodeJS 读写文件》
点赞 + 关注 + 收藏 = 学会了

你可能感兴趣的:(NodeJS stream入门)