我有一个二进制数据文件,其中每个x
字节都是一条记录,并且我有一些格式/掩码(但是您更喜欢看到它)来破译该数据。这就像short short int short float double
,,,废话。所以我正在使用File API读取这个文件,我最终需要使用ArrayBuffer,但我还没有……所以我的问题有两个。首先,也是最直接的,将二进制文件中的每个字节读x
入 ArrayBuffer 的最佳方法是什么?
其次,当我遇到一些问题时......为什么下面的脚本在读取 500kb 二进制文件时几乎立即填充了 5gb+ 的 RAM?
$('input[type="file"]').change(function(event) {
// FileList object
var files = event.target.files;
for (var i = 0, f; f = files[i]; i++) {
var reader = new FileReader();
// closures and magnets, how do they work
reader.onload = (function(f) {
return function(event) {
// data file starts with header XML
// indexOf +9 for </HEADER> and +1 for null byte
var data_start = event.target.result.indexOf('</HEADER>')+10,
// leverage jQuery for XML
header = $(event.target.result.slice(0,data_start)),
rec_len = parseInt(header.find('REC_LEN').text(),10);
// var ArrayBuffer
// define ArrayBufferView
// loop through records
for (var i = data_start; i<event.target.result.length; i+=rec_len) {
// fill ArrayBuffer
// add data to global data []
console.log(i+' : '+event.target.result.slice(i, i+rec_len));
}
};
})(f);
// Read as Binary
reader.readAsBinaryString(f);
}
});