-
管道流最经典的管道流图
-
我们把文件比作装水的桶,而水就是文件里的内容,我们用一根管子(pipe)连接两个桶使得水从一个桶流入另一个桶,这样就慢慢的实现了大文件的复制过程。
-
-
什么是stream
- 每个stream对象都是一个水桶,通过管道pipe流到dest目标里
- stream是一个抽象接口,node中有很多对象实现了这个接口
- 对http服务器发起请求的request对象就是一个stream流
-
了解stream流能处理的问题,了解IO操作的性能瓶颈概念
- IO包括'网络IO'和'文件IO'
- 相比于CPU计算和内存读写,IO的突出特点就是:慢!
- 在有限的硬件资源下提高IO的操作效率
- stream流能提升IO的的操作效率的方法
-
stream基础实例(根据实际项目变通使用)
- 标准输入输出
process.stdin.pipe(process.stdout)
- http的pipe管道
const http = require('http') const server = http.createServer((req, res) => { if(req.method === 'POST') { req.pipe(res) // pipe管道 } }) server.listen(8000)
- stream拷贝文件(拷贝效率高)
var fs = require('fs') var path = require('path') // 两个文件名 var fileName1 = path.resolve(__dirname, 'data.txt') var fileName2 = path.resolve(__dirname, 'databak.txt') // 读取文件的stream流 var readStream = fs.createReadStream(fileName1) // 写入文件的stream流 var writeStream = fs.createWriteStream(fileName2) // 通过拷贝,执行pipe readStream.pipe(writeStream) // 可以监听data,查看每一步操作的数据 readStream.on('data', chunk => { console.log(chunk.toString()); }) // 数据读取完成,即拷贝完成 readStream.on('end', function() { console.log('拷贝完成'); })
- stream读取文件
const http = require('http') const path = require('path') const fs = require('fs') const server = http.createServer((req, res) => { if(req.method === 'GET') { var fileName = path.resolve(__dirname, 'data.txt') var stream = fs.createReadStream(fileName) stream.pipe(res) // 将res作为stream的dest } }) server.listen(8000)
- 标准输入输出
Nodejs stream流
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...