【问题标题】:Processing a 100MB file in Node.js在 Node.js 中处理一个 100MB 的文件
【发布时间】:2013-11-07 00:53:54
【问题描述】:

基本上我有一个文件,比如100mb.qs,我需要通过以下函数传递它的全部内容:

function process(in){
  var out = JSON.stringify(require('querystring').parse(in));
  return out;
}

然后用结果替换文件的内容。

我想我必须流式传输它,所以...

require('fs').createReadStream('1mb.qs').pipe( /* ??? */ )

我该怎么办?

【问题讨论】:

  • 流在这里不是很有用,因为查询字符串模块不是流解析器,需要将整个对象加载到内存中。
  • 编写自己的流式查询模块

标签: node.js stream query-string filestream


【解决方案1】:

您应该查看clarinet 以将JSON 解析为流。

var createReadStream = require('fs').createReadStream
, createWriteStream = require('fs').createReadStream
, parseJson = require('clarinet').createStream()
;

parseJson.on('error', function(err){
  if (err) throw err
})

parseJson.on('onvalue', function(v){
  // do stuff with value 
})

parseJson.on('onopenobject', function (key) {
  // I bet you got the idea how this works :)
})

createReadStream('100mb.qs')
  .pipe(parseJson)
  .pipe(createWriteStream('newerFile.qs'))

还有更多活动要听,所以你一定要看看。
此外,只要准备好写入 JSON 节点,它就会向下游发送数据。再好不过了。

希望对你有帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2019-12-10
    • 2016-01-10
    相关资源
    最近更新 更多