File.length 大于 8 Pebibytes?

问题描述 投票:0回答:1

Blob
File
的长度大于
Number.MAX_SAFE_INTEGER
字节(8 PiB;9 PB)时,JavaScript 如何处理?

let file = await filePrompt("Please upload a ten petabyte file.");
let len = file.byteLength;
for ( let i = ((len <= Number.MAX_SAFE_INTEGER) ? 0 : BigInt(0)) ; i < len ; i++ ) {
    …
}

以上面的代码为例,会

typeof len === 'bigint'
吗?

(我无法访问具有足够资源的运行时环境来测试这一点。)

javascript bigint
1个回答
2
投票

File
size
的内部表示是
unsigned long long
。为了将其公开给 JavaScript,WebIDL 规范说

将 IDL

unsigned long long
值转换为 ECMAScript value 是一个 Number 值,表示最接近的数字 值到
unsigned long long
,选择带有 偶数有效数如果有两个同样接近 价值观。如果
unsigned long long
小于或等于 253 − 1,那么这个数字就能准确表示 与
unsigned long long
相同的值。

所以是的,它可能会失去精度。在这些情况下,它不会生成 BigInt。

但是,我有理由确定大多数浏览器首先无法打开这样的文件,而是会抛出异常。

© www.soinside.com 2019 - 2024. All rights reserved.