栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Node.js:如何将流读入缓冲区?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Node.js:如何将流读入缓冲区?

总的来说,我看不到任何会破坏您代码的东西。

两个建议:

合并

Buffer
对象的方式不是最佳选择,因为它必须在每个“数据”事件上复制所有预先存在的数据。最好将大块放在一个数组中,然后将
concat
它们全部放在最后。

var bufs = [];stdout.on('data', function(d){ bufs.push(d); });stdout.on('end', function(){  var buf = Buffer.concat(bufs);}

为了提高性能,我将调查您使用的S3库是否支持流。理想情况下,您根本不需要创建一个大缓冲区,只需将

stdout
流直接传递到S3库即可。

至于问题的第二部分,那是不可能的。调用函数时,将为其分配自己的私有上下文,并且只能从该函数内定义的其他项访问该函数内定义的所有内容。

更新资料

将文件转储到文件系统可能会减少每个请求的内存使用量,但是文件IO可能非常慢,因此可能不值得。我想说,除非可以对此功能进行概要分析和压力测试,否则不要进行过多优化。如果垃圾收集器正在执行其工作,则可能是过度优化了。

综上所述,总有更好的方法,所以不要使用文件。由于所需的只是长度,因此您可以计算该长度而无需将所有缓冲区附加在一起,因此根本就不需要分配新的Buffer。

var pause_stream = require('pause-stream');// Your other pre.var bufs = [];stdout.on('data', function(d){ bufs.push(d); });stdout.on('end', function(){  var contentLength = bufs.reduce(function(sum, buf){    return sum + buf.length;  }, 0);  // Create a stream that will emit your chunks when resumed.  var stream = pause_stream();  stream.pause();  while (bufs.length) stream.write(bufs.shift());  stream.end();  var headers = {      'Content-Length': contentLength,      // ...  };  s3.putStream(stream, ....);


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/427134.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号