使用最新的nodejs ......
来自mongodb的二进制文件(文档中的字段)。意味着我将同时处理多个二进制有效负载。数据是由切片(nal单位)组成的媒体文件(h264)。每个切片都是分隔的。
如果我对“数据”事件采取行动,使用来自fs的可读流是否保留了数据块的顺序?我可以保证按顺序处理“数据”吗? (参见每次调用中“this”范围的路径部分中的原点)
答案 0 :(得分:4)
将数据写入流的顺序保证与读取的顺序相同。写入流时,数据会被写入或排队,顺序不会改变。这来自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);
}
除非没有排队的数据,否则不会触发数据事件,这意味着您将按照传入的顺序获取数据。