关于 FileReader.readAsArrayBuffer() 的问题
Question regarding FileReader.readAsArrayBuffer()
如果我有一个大文件(例如数百 MB),FileReader.readAsArrayBuffer() 是否将整个文件数据读入 ArrayBuffer?
根据[此处[(https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsArrayBuffer) 这就是发生的事情。
我有一个数 GB 的大 .zip 文件。
我担心在工作时占用整个 RAM,例如在移动设备上。
是否有返回文件句柄并根据需要读取文件的一部分的替代方法?
您可以为此使用 Blob.stream()
:
const bigBlob = new Blob(["somedata".repeat(10e5)]);
console.log("Will read a %sbytes Blob", bigBlob.size)
const reader = bigBlob.stream().getReader();
let chunks = 0;
reader.read().then(function processChunk({ done, value }) {
if (done) {
console.log("Stream complete. Read in %s chunks", chunks);
return;
}
// do whatever with the chunk
// 'value' is an ArrayBuffer here
chunks++;
return reader.read().then(processChunk);
}).catch(console.error);
如果我有一个大文件(例如数百 MB),FileReader.readAsArrayBuffer() 是否将整个文件数据读入 ArrayBuffer?
根据[此处[(https://developer.mozilla.org/en-US/docs/Web/API/FileReader/readAsArrayBuffer) 这就是发生的事情。
我有一个数 GB 的大 .zip 文件。
我担心在工作时占用整个 RAM,例如在移动设备上。
是否有返回文件句柄并根据需要读取文件的一部分的替代方法?
您可以为此使用 Blob.stream()
:
const bigBlob = new Blob(["somedata".repeat(10e5)]);
console.log("Will read a %sbytes Blob", bigBlob.size)
const reader = bigBlob.stream().getReader();
let chunks = 0;
reader.read().then(function processChunk({ done, value }) {
if (done) {
console.log("Stream complete. Read in %s chunks", chunks);
return;
}
// do whatever with the chunk
// 'value' is an ArrayBuffer here
chunks++;
return reader.read().then(processChunk);
}).catch(console.error);