javascript - 我应该将哪个类型的数组用于图像文件的 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);
我们得到:
ArrayBuffer 对象用于表示一个通用的、固定长度的原始二进制数据缓冲区。
它是一个字节数组,在其他语言中通常称为“字节数组”。
您不能直接操作 ArrayBuffer 的内容;相反,您创建一个类型化的数组对象或 DataView 对象,它以特定格式表示缓冲区,并使用它来读取和写入缓冲区的内容。
因此,我不能直接在md5
函数中使用,我需要首先创建类型数组对象。
我的选择是:
- 整数8数组
- Uint8Array
- Int16Array
- Int32Array
我应该在我的代码中使用以上哪一项?为什么?
更多信息:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray
解决方案
对此没有一般性的答案,这基本上取决于消费者以及他们想要处理的格式。
例如,如果您想解析 PNG 的实际文件格式,您实际上需要能够以 BigEndian 顺序读取其中的一些块,这意味着您需要在大多数个人计算机上使用 DataView。
但是在这里,您的库声称它们确实支持 Uint8Array 和 ArrayBuffer。但是,测试它似乎确实无法处理裸 ArrayBuffers,所以请使用 Uint8Array,因为这就是您图书馆的文档所说的。
推荐阅读
- spring - Spring Boot 休息控制器:如何返回干净的 json
- c - 如何从标准输入C中获取一行数据
- java - 任何支持调度邮件发送的 API/邮件服务提供商?
- python-3.x - 输入 texbox 上的 V- 模型在 django for 循环中更新其他 v 模型输入文本上的文本
- javascript - 如何与 jest toHaveBeenCalled 一起使用不同的实例
- python - 如何使用 Apache Beam (Dataflow) 从 API 获取数据?
- python - Python中噪声图像中的多曲线检测
- php - Phan 给出内置 JetBrains PhpStorm 注释的问题
- nginx - 使用 websocket 配置 nginx 域:端口
- css - 材质 ui 覆盖我的其他材质组件