共计 1654 个字符,预计需要花费 5 分钟才能阅读完成。
本文简介
点赞 + 关注 + 珍藏 = 学会了
Stream
是一个概念,翻译成中文就是 “流” 的意思。它并非 NodeJS
独有。
本文就用 NodeJS
举例说明 Stream
。
Stream 简介
在传输大文件、视频、音频时,通常是分段传输的,能够把这个概念粗略的了解成 Stream
。
Stream
的中文意思是 “流”,我在网上找了个图很好的讲明这个货色。
传多少过去就接多少,而这个传输过程咱们应用 NodeJS
时是不须要关怀的,因为 NodeJS
提供了对应的办法来解决。
在《NodeJS http 申请》中讲到的 POST
办法,其实也用了这个概念。
Stream 用法
我应用 复制文件内容 为例子阐明 Stream
。
如果文件内容很少,咱们是能够一次复制完的。但如果文件内容很多,最好就应用“分包”复制的形式。而这些 NodeJS
都为咱们解决好了。
我筹备了 3 个文件,它们别离是 index.js
、data.txt
和 data-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('复制实现')
})
解析:
- 首先引入
fs
和path
模块,可对文件进行操作 - 获取
data.txt
和data-backup.txt
文件,并别离赋值给fileName1
和fileName2
- 应用
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 读写文件》
点赞 + 关注 + 珍藏 = 学会了