javascript:字符串限制为268,400,000长度?

时间:2017-02-23 12:00:45

标签: javascript string size limit

使用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();
    }

0 个答案:

没有答案