无法使用读/写流正确解析和重新组装二进制文件
Unable to correctly parse and reassemble binary file using read/writestreams
我正在尝试获取二进制文件的某些段,然后将它们重新组合为压缩格式。然而,在完成该任务时,二进制数据以半随机顺序进行加扰。事实上,最初大约15k个字节是正确的,然后冲突不断发生。出了什么问题?我相信这些流是相互碰撞的(因为没有更好的比喻),并且得到的字节长度是正确的。为什么会发生这种情况?我以为我对异步性采取了足够的预防措施?
var destinationPath = something.bin;
Promise.all(sources.map(function (source) {
return new Promise(function (resolve, reject) {
var output = fs.createWriteStream(destinationPath, {'flags': 'a', 'bufferSize': 64 * 4096});
var input = fs.createReadStream(source.filePath, {
start: source.parameters.start,
end: source.parameters.end + 3
});
input.on('end', function () {
output.on('finish', function () {
resolve();
});
});
input.pipe(output);
});
}));
不确定这是否有影响,但您是否按顺序尝试?您可以在同一个文件上同时创建多个写入流。
例如:
var destinationPath = something.bin;
var promise = Promise.resolve();
sources.forEach(function (source) {
promise = promise.then(funtion() {
return new Promise(function (resolve, reject) {
var output = fs.createWriteStream(destinationPath, {'flags': 'a', 'bufferSize': 64 * 4096});
var input = fs.createReadStream(source.filePath, {
start: source.parameters.start,
end: source.parameters.end + 3
});
input.on('end', function () {
output.on('finish', function () {
resolve();
});
});
input.pipe(output);
});
});
});
promise.then(function() {
// we're done here
});
相关文章:
- 如何将PDF作为二进制文件传递到window.open()
- 如何在Windows中将Javascript文件编译成二进制文件
- 在Internet Explorer中从二进制文件打开PDF
- 如何使用JavaScript粘贴原始二进制文件而不出现“无效字符”错误
- 使用JavaScript从二进制文件中读取字节,而不使用jQuery
- 使用 node.js 从 Google 云端硬盘读取二进制文件
- 使用 JQuery 读取二进制文件的浏览器之间的不同行为
- 如何获取 CasperJS 请求的图像的二进制文件
- 使用 Node.js 执行命令行二进制文件
- 将用JavaScript生成的二进制文件保存到iPad
- 希望将客户端生成的二进制文件保存到客户端机器
- 使用jQuery从服务器下载二进制文件
- 如何通过URI引用外部二进制文件
- 将 noteCount 转换为 tumblr 主题的二进制文件
- Javascript 二进制文件到服务器
- 从 blob 获取有效的二进制文件
- 从二进制文件流式传输 JS
- 使用位于插件文件夹内的参数执行二进制文件
- 在Firefox或Chrome中获取
二进制文件,而无需提出新请求
- 无法使用读/写流正确解析和重新组装二进制文件