我应该将哪个类型化数组用于图像文件的 ArrayBuffer?



我正在使用FileReader().readAsArrayBuffer()读取图像文件,并且正在使用md5库来创建文件的哈希。readAsArrayBuffer()返回一个ArrayBuffer

const reader = new FileReader();
reader.onload = (event) => {
// NEED TO CREATE TYPED ARRAY FROM
const binary = new Uint8Array(event.target.result);
const md5Hash = md5(binary);
};
reader.readAsArrayBuffer(imageFile);

来自MDN ArrayBuffer

我们明白:

对象用于表示通用的固定长度原始二进制数据缓冲区。

它是一个字节数组,在其他语言中通常称为"字节数组"。

您不能直接操作 ArrayBuffer 的内容;而是创建一个类型化数组对象或一个以特定格式表示缓冲区的 DataView 对象,并使用它来读取和写入缓冲区的内容。

因此,我不能直接使用md5函数,我需要首先在类型数组对象上创建。

我的选择是:

  • Int8Array
  • Uint8Array
  • Int16Array
  • Int32数组

我应该在代码中使用上述哪一项?为什么呢?

更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray

对此没有通用的答案,这基本上取决于消费者以及他们想要处理的格式。

例如,如果你想解析PNG的实际文件格式,你实际上需要能够以BigEndian顺序读取它的一些块,这意味着你需要在大多数个人计算机上使用DataView。

但是在这里,您的库声称它们确实支持Uint8Array和ArrayBuffer。但是,测试它似乎确实无法处理裸体 ArrayBuffers,所以使用 Uint8Array,因为这就是您的库的文档所说的。

最新更新