我有一个二进制格式的文件:
格式如下:
[4个字节的头] [8个字节的int64,表示接下来要读取多少字节] [可变字节数(与int64大小相同) - 读取实际信息]
然后它会重复,所以我必须先读取前12个字节以确定我需要读取多少字节。
我已经尝试过:
var readStream = fs.createReadStream('/path/to/file.bin');
readStream.on('data', function(chunk) { ... })
我遇到的问题是,每次chunk都以65536字节为一组返回,而我需要更具体地了解我正在读取的字节数。
我曾经尝试过
readStream.on('readable', function() { readStream.read(4) })
,但这种方法也不太灵活,因为它似乎将异步代码变成了同步代码,因为我必须将“读取”的操作放在while循环中。或者在这种情况下,也许使用
fs.read(fd, buffer, offset, length, position, callback)
会更合适?
d.copy()
和Buffer.concat()
。 - user949300Buffer.concat()
,因为没有必要处理数组和缓冲区;将增长的缓冲区包装在数组中只会增加一些开销,而且如果没有给出长度,concat()
方法说它必须循环两次缓冲区,所以可能使用copy()
方法,并使用指针来保持位置是更好的性能方法,尽管我还没有确定。 - MidnightLightning