gpt4 book ai didi

javascript - 为什么 Blob of Array 比 Blob of Uint8Array 小?

转载 作者:行者123 更新时间:2023-11-30 11:21:53 30 4
gpt4 key购买 nike

我使用 FileReader.readAsArrayBuffer 读取文件,然后执行如下操作:

  var compressedData = pako.gzip(new Uint8Array(this.result));
var blob1 = new Blob([compressedData]); // size = 1455338 bytes
var blob2 = new Blob(compressedData); // size = 3761329 bytes

例如:如果结果有 4194304 字节,压缩后大小为 1455338 字节。但出于某种原因,Uint8Array 需要包装在一个数组中。这是为什么?

最佳答案

比照。 BLOB 构造函数的文档:

https://developer.mozilla.org/en-US/docs/Web/API/Blob/Blob

[the first argument] is an Array of ArrayBuffer, ArrayBufferView, Blob, DOMString objects, or a mix of any of such objects, that will be put inside the Blob. DOMStrings are encoded as UTF-8.

我不确定它在幕后是如何工作的,但基本上构造函数期望将一系列内容打包到 BLOB 中。因此,在第一种情况下,您构建的是单个部分(即您的 ArrayBuffer)的 BLOB,而在第二种情况下,您是从 1455338 个部分(即每个字节单独)构建它。

由于文档说 BLOB 部分只能是数组或字符串,它可能最终将 ArrayBuffer 中的每个字节值转换为 UTF-8 字符串,这意味着它不是每个数字使用 1 个字节,而是使用 1 个字节每个十进制数字(两个结果大小的比率似乎支持这一点,因为单字节值的长度为 1-3 位,较大的 BLOB 大约是较小的 BLOB 大小的 2.5 倍)。这不仅浪费,我敢肯定它还会使您的 ZIP 无法使用。

所以,底线是,第一个版本是正确的方法。

关于javascript - 为什么 Blob of Array 比 Blob of Uint8Array 小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49552499/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com