当前位置: 首页 > 后端技术 > Node.js

每日灵魂题——Node中Stream的理解?应用场景?

时间:2023-04-03 20:11:22 Node.js

Stream流数据传输方式是顺序的。它不像传统程序那样一次将一个文件读入内存,而是逐块读取数据。例如:1.看视频视频资源不是一次性返回的;流媒体时一点点从服务器流向本地播放器;thisisthestreamused2.读取大文件如果使用streams,创建一个读取流createReadStream可以边读边通过管道链接返回,减轻服务器压力;如果直接使用readFile;一次返回整个文件,内存和网络可能吃不消。Typewritablestream:可以写入数据的流。例如fs.createWriteStream()可以使用流将数据写入文件可读流:可以从中读取数据的流。例如fs.createReadStream()可以从文件中读取内容作为双工流:一种可读可写的流。例如net.Socket转换流:可以在写入和读取数据时修改或转换数据的流。例如,在文件压缩操作中,可以将压缩后的数据写入文件,从文件中读取解压后的数据。IO操作适用场景:http请求&文件操作具体场景为:get请求返回文件给客户端文件操作一些封装工具底层操作1.get请求使用stream返回文件给客户端stream返回文件,res也是一个stream对象,通过pipe管道返回文件数据constserver=http.createServer(function(req,res){constmethod=req.method;//获取请求方法if(method==='GET'){//获取请求constfileName=path.resolve(__dirname,'data.txt');letstream=fs.createReadStream(fileName);stream.pipe(res);//使用res作为流的目标}});server.listen(8000);2.文件操作创建一个readStream,一个可写数据流,writeStream,通过管道传输数据过去constfs=require('fs')constpath=require('path')//两个文件名constfileName1=path.resolve(__dirname,'data.txt')constfileName2=path.resolve(__dirname,'data-bak.txt')//读取文件的流对象constreadStream=fs.createReadStream(fileName1)//写入文件的流对象thefileconstwriteStream=fs.createWriteStream(fileName2)//通过管道执行拷贝并传输数据readStream.pipe(writeStream)//数据读取完成并监听,即拷贝完成readStream.on('end',function(){console.log('复制完成程')})3.一些打包工具的底层操作目前流行的一些前端打包构建工具都是node编写的。如吞咽