【问题标题】:Nodejs Readable streams, parsing binary data, preserving orderNodejs可读流,解析二进制数据,保留顺序
【发布时间】:2013-09-20 17:12:43
【问题描述】:

使用最新的 nodejs...

得到一个来自 mongodb 的二进制文件(文档中的字段)。意味着我将同时处理多个二进制有效负载。数据是由切片(最终单元)组成的媒体文件 (h264)。每个切片都有分隔符。

如果我对“数据”事件采取行动,则使用来自 fs 的可读流是否会保留数据块的顺序?我可以保证按顺序处理“数据”吗? (在每个调用中查看“this”范围的路径部分的来源)

【问题讨论】:

    标签: node.js parsing streaming readable


    【解决方案1】:

    数据写入流的顺序保证与读取的顺序相同。写入流时,数据要么被写入,要么被排队,顺序不会改变。这是来自 Node.js 的源代码:

    function writeOrBuffer(stream, state, chunk, encoding, cb) {
      chunk = decodeChunk(state, chunk, encoding);
      if (util.isBuffer(chunk))
        encoding = 'buffer';
      var len = state.objectMode ? 1 : chunk.length;
    
      state.length += len;
    
      var ret = state.length < state.highWaterMark;
      state.needDrain = !ret;
    
      if (state.writing || state.corked)
        state.buffer.push(new WriteReq(chunk, encoding, cb));
      else
        doWrite(stream, state, false, len, chunk, encoding, cb);
    
      return ret;
    }
    

    这也是触发数据事件的方式:

    // if we want the data now, just emit it.
    if (state.flowing && state.length === 0 && !state.sync) {
      stream.emit('data', chunk);
      stream.read(0);
    }
    

    除非没有排队的数据,否则不会为块触发 data 事件,这意味着您将按照传入的顺序获取数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-23
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      相关资源
      最近更新 更多