Uint8Array недопустимая длина типизированного массива для большего буфера массива - PullRequest
0 голосов
/ 23 октября 2018

Я читаю файл как буфер массива с помощью:

reader.readAsArrayBuffer(myFile);

Затем я беру этот буфер массива и пытаюсь создать массив Uint8Array с помощью:

reader.onload = e => {
  let arrayBuffer = new Uint8Array(e.target.result, 0, 
  e.target.result.byteLength);

IТакже пробовал просто:

let arrayBuffer = new Uint8Array(e.target.result);

В обоих случаях, когда я загружаю файл с длиной байта 198873088, он работает нормально.Однако, когда я пытаюсь увеличить размер файла 1564725248, в первом случае я получаю следующее:

Invalid typed array length: 1564725248

, а во втором случае:

Invalid typed array length: undefined

Я думал, что ограничение составляет 2 ^32 - 1, что было бы 42949672995, кто-нибудь может объяснить, почему есть проблема с длиной?

1 Ответ

0 голосов
/ 26 декабря 2018

В последней версии Chrome 71.0.3578.98 (официальная сборка) (64-разрядная версия) я получаю следующие результаты.Каждый тест выполняется после полной перезагрузки на пустой странице.

a=new Uint8Array(256*256*256*128) // Triggers Uncaught RangeError: Invalid typed array length: 2147483648
a=new Uint8Array(256*256*256*127) // Works, array length 2130706432

Однако более интересным является то, что я могу вызвать «Aw, Snap» без получения исключения.:

a=new Uint8Array(256*256*256*127 + 64) // Doesn't work, triggers "Aw, Snap!" page
...