关于前端:NodeJS-stream入门

37次阅读

共计 1654 个字符,预计需要花费 5 分钟才能阅读完成。

本文简介

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

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 文件内容

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

而后输出 lorem100000 而后按回车,就能主动帮输出 10 万个单词。lorem 前面加的数字就是要输出的单词书。

按下回车后

保留 data.txt,而后再执行 index.js

此时关上控制台就能够看到分包的状况了。

以上就是 Stream 的简略介绍。

总结

Stream 能够了解为分包,“流”的意思就是一点点流过来,而不是一次把所有搬过去。

你能够设想一下搬家的状况,如果你在一个中央生存了一段时间,生活用品、家具各种货色都多起来后,根本不可能一次把所有货色都搬走。通常你须要把货色一份份打包好,而后一份份搬到楼下,再搬上车运走。这就是 Stream 的概念。

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

举荐浏览

👍《NodeJS http 申请》

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

👍《NodeJS 操作 cookie》

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

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

正文完
 0