Stream是NodeJS的原生模块。它的优势是可以让程序更有效的处理庞大的数据。原因在于stream模块可以将数据分段后导入到指定位置。举个例子:如果有一个200MB的文件需要读取并传送给用户,程序可以读取文件然后发送给客户端。但是读取文件的过程需要将整个文件读取并保存至内存后再进行发送,所以内存空间必然会变得拥挤。更好的办法是通过stream模块来完成数据读取和传送。数据流分四种:Readable(可读), Writable(可写), Duplex(读写都可以), Transform(可转换),Node的file system模块变自带可读stream,所以指定文件可以通过fs.createReadStream将文件内容以数据流的格式获取,然后通过pipe函数将数据直接导回:
const fs = require('fs');
const server = require('http').createServer();
server.on('request', (req, res) => {
const src = fs.createReadStream('./big.file');
src.pipe(res);
});
server.listen(8000);
(代码样例来自:https://medium.freecodecamp.org/node-js-streams-everything-you-need-to-know-c9141306be93)
通过pipe的方式将数据导入res时,内存空间只会被某块数据流占用而非整个文件大小,因此stream带来了性能上的优化。