node.js - Nodejs 可读流,解析二进制数据,保留顺序

标签 node.js parsing streaming readable

使用最新的nodejs...

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

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

最佳答案

数据写入流的顺序保证与读取的顺序相同。写入流时,数据要么被写入,要么被排队,顺序不会改变。这是来自 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);
}

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

关于node.js - Nodejs 可读流,解析二进制数据,保留顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18829952/

相关文章:

streaming - gstreamer udp流很慢

java - Android:使用AudioTrack和Socket手动高效地流音频

php - 如何将图像作为流提供

javascript - Parse.com JavaScript 查询错误处理不起作用

javascript - 如何仅更改对象中键的第一个实例

javascript - 如何在函数中将数据发送到firebase数据库

javascript - 如何组织 async.waterfall 调用循环

python-3.x - 如何使用 BeautifulSoup 从表中选择特定行?

jquery - 谷歌日期解析

iphone - 当设备处于离线状态时,如何在 iPhone 上本地保存 XML 文件?