使用javascript和chrome(在电子上)我正在以块的形式读取文件并将其附加到字符串中。我现在可以看到,如果我尝试读取462Mb的文件,我会得到错误RangeError: Invalid string length
,如果在每个块中我打印字符串长度,则lass读数显示268,400,000
,读取100,000
的块1}}。
这个错误是什么?一个javascript字符串限制?我的电脑停止了吗?我可以看到CPU保持在50%以下,内存不会高于55%。
我即将考虑一种解决方法,但我找不到任何有关长度限制的内容,所以我可能面临其他类型的错误?
我用来读取文件的代码
var start, temp_end, end;
var BYTES_PER_CHUNK = 100000;
function readFile(file_to_read,param) {
if (param.start < param.end) {
return new Promise(function(resolve){
var chunk = file_to_read.file.slice(param.start, param.temp_end);
var reader = new FileReader();
reader.onload = function(e) {
if (e.target.readyState == 2) { // the file is being uploaded in chunks, and the chunk has been successfully read
document.getElementById('file_monitor').max = param.end;
document.getElementById('file_monitor').value = param.temp_end;
//file.data += new TextDecoder("utf-8").decode(e.target.result);
Promise.resolve()
.then(function(){
file_to_read.data += e.target.result;
}).then(function(){
param.start = param.temp_end; // 0 if a new file, the previous one if still reading the same file
param.temp_end = param.start + BYTES_PER_CHUNK;
if (param.temp_end > param.end)
param.temp_end = param.end;
resolve(readFile(file_to_read,param));
}).catch(function(e){
console.log(e);
console.log(file_to_read.data.length);
console.log(file_to_read.data);
console.log(e.target.result);
resolve();
});
}
}
reader.readAsText(chunk);
// reader.readAsBinaryString(chunk);
});
} else
return Promise.resolve();
}