0
採用了最新...的NodeJS可讀的NodeJS流,解析二進制數據,維持秩序
有一個二進制的mongodb從未來(文檔中的字段)。意味着我將同時處理多個二進制有效載荷。數據是由切片(最終單位)組成的媒體文件(h264)。每個切片都是分隔的。
如果我對「數據」事件採取行動,從fs使用可讀流是保留數據塊的順序?我能保證按順序處理「數據」嗎? (請參閱每個調用中「此」範圍的路徑部分中的原點)
採用了最新...的NodeJS可讀的NodeJS流,解析二進制數據,維持秩序
有一個二進制的mongodb從未來(文檔中的字段)。意味着我將同時處理多個二進制有效載荷。數據是由切片(最終單位)組成的媒體文件(h264)。每個切片都是分隔的。
如果我對「數據」事件採取行動,從fs使用可讀流是保留數據塊的順序?我能保證按順序處理「數據」嗎? (請參閱每個調用中「此」範圍的路徑部分中的原點)
數據寫入流的順序保證與讀取順序相同。寫入流時,數據會寫入或排隊,順序不會更改。這是從源頭的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);
}
數據事件不會觸發塊除非沒有排隊的數據,這意味着您將按照傳入的順序獲取數據。