在节点js中学习流。我想知道为什么在节点js中有文件系统时为什么要在节点js中使用Stream。
答案是将流传播的数据分成多个部分。并通过网络发送。
为此,我们节点js提供了此功能-> createReadStream(fileName).pipe(res);
我的工作节点Js流代码。
const { createServer } = require('http');
const { createReadStream } = require('fs');
const fs = require('fs');
const fileName = './pika.mp4';
createServer( (req,res) => {
res.writeHead(200, {
'Content-Type': 'video/mp4'
});
createReadStream(fileName).pipe(res);
}).listen(3000, () => console.log('Server running - 3000'));
输出完美无问题,
问题是如果我不使用流并使用readFile或readFileSync 仍然我得到相同的输出。
代码->
const { createServer } = require('http');
const { createReadStream } = require('fs');
const fs = require('fs');
const fileName = './pika.mp4';
createServer( (req,res) => {
fs.readFile(fileName,(err,data) => {
res.writeHead(200, {
'Content-Type': 'video/mp4'
});
res.write(data);
});
}).listen(3000, () => console.log('Server running - 3000'));
我很困惑,在视频流传输的情况下我仍不使用流传输。
答案 0 :(得分:0)
您正在从fs模块读取视频文件。
答案 1 :(得分:0)
两个代码均正确,并将文件内容流式传输到网络。
它们对于客户端的行为完全相同。
但是,第二个将整个文件加载到内存中,然后再将数据发送到网络。
您应该偏爱第一种方法,因为它可以简单地将文件读取器的输出流“连接”到网络响应的输入流。