我应该为图像文件的ArrayBuffer使用哪种类型的数组?

时间:2019-06-10 21:08:17

标签: javascript html browser md5 typed-arrays

我正在使用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对象用于表示通用的,固定长度的原始二进制数据缓冲区。

     

它是字节数组,在其他语言中通常称为“字节数组”。

     

您不能直接操纵ArrayBuffer的内容。 相反,您将创建一个类型化数组对象或一个以特定格式表示缓冲区的DataView对象,然后使用该对象来读取和写入缓冲区的内容。

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

我的选择是:

  • Int8Array
  • Uint8Array
  • Int16Array
  • Int32Array

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

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

1 个答案:

答案 0 :(得分:1)

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

例如,如果您想解析PNG的实际文件格式,则实际上需要能够以BigEndian顺序读取其某些块,这意味着大多数个人计算机上都需要DataView。< / p>

但是这里your library声称它们确实支持Uint8Array和ArrayBuffer。但是,经过测试,看来它们确实无法处理裸体的ArrayBuffer,所以使用Uint8Array ,因为这就是您的库文档所说的。