我有一個二進制格式的文件:NodeJS:如何使用readStream編寫文件解析器?
格式如下:
[4 - header bytes] [8 bytes - int64 - how many bytes to read following] [variable num of bytes (size of the int64) - read the actual information]
然後它重複,所以我必須首先讀取前12個字節,以確定有多少更多的字節我需要閱讀。
我曾嘗試:
var readStream = fs.createReadStream('/path/to/file.bin');
readStream.on('data', function(chunk) { ... })
我的問題是,該塊總是回來在65536個字節塊在同一時間,而我需要的,我讀的字節數更加具體。
我一直試圖readStream.on('readable', function() { readStream.read(4) })
但它也並不是很靈活,因爲它似乎變成異步代碼爲同步代碼,因爲,我必須把「讀書」在while循環
也許readStream是不適合在這種情況下,我應該用這個呢? fs.read(fd, buffer, offset, length, position, callback)
有趣的是,即使我們的代碼做了非常類似的事情(在緩衝區中收集數據塊),代碼和方法調用也完全不同。例如'd.copy()'和'Buffer.concat()'。 – user949300
正確;我避免了'Buffer.concat()',因爲在這種情況下,不需要處理數組和緩衝區;將增長後的Buffer包裝在一個數組中只是增加了一些開銷,而且'concat()'方法表示如果沒有給出長度,它必須遍歷緩衝區兩次,所以可能使用'copy()'方法,指針保持你的位置是更好的性能方法,雖然我沒有檢查確定。 – MidnightLightning