Uint8Array类型较大的数组缓冲区的类型化数组长度无效

时间:2018-10-23 18:58:04

标签: javascript arraybuffer typed-arrays

我正在通过以下方式读取文件作为数组缓冲区:

reader.readAsArrayBuffer(myFile);

然后我要使用该数组缓冲区,并尝试通过以下方式创建Uint8Array:

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

我也尝试过:

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 :(得分:0)

在最新的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
相关问题