2013-09-16 68 views
0

採用了最新...的NodeJS可讀的NodeJS流,解析二進制數據,維持秩序

有一個二進制的mongodb從未來(文檔中的字段)。意味着我將同時處理多個二進制有效載荷。數據是由切片(最終單位)組成的媒體文件(h264)。每個切片都是分隔的。

如果我對「數據」事件採取行動,從fs使用可讀流是保留數據塊的順序?我能保證按順序處理「數據」嗎? (請參閱每個調用中「此」範圍的路徑部分中的原點)

回答

3

數據寫入流的順序保證與讀取順序相同。寫入流時,數據會寫入或排隊,順序不會更改。這是從源頭的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); 
} 

數據事件不會觸發塊除非沒有排隊的數據,這意味着您將按照傳入的順序獲取數據。