Какой типизированный массив я должен использовать для ArrayBuffer файлов изображений? - PullRequest
0 голосов
/ 11 июня 2019

Я читаю файлы изображений с 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);

From MDN ArrayBuffer

Мы получаем, что:

Объект ArrayBuffer используется для представления общего буфера необработанных двоичных данных фиксированной длины.

Это массив байтов, который в других языках часто называют «байтовым массивом».

Вы не можете напрямую манипулировать содержимым ArrayBuffer; Вместо этого вы создаете один из типизированных объектов массива или объект DataView, который представляет буфер в определенном формате, и используете его для чтения и записи содержимого буфера.

Таким образом, я не могу напрямую использовать функцию md5, мне нужно сначала активировать объекты массива типов.

Мои параметры:

  • Int8Array
  • Uint8Array
  • Int16Array
  • Int32Array

Что из перечисленного следует использовать в моем коде?И почему?

Подробнее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray

1 Ответ

1 голос
/ 11 июня 2019

Нет общего ответа на этот вопрос, который в основном зависит от потребителя и с каким форматом он хочет иметь дело.

Например, если вы хотите проанализировать фактический формат файла PNG, вам действительно нужно будет прочитать некоторые его фрагменты в порядке BigEndian, то есть вам потребуется DataView на большинстве персональных компьютеров.

Но здесь ваша библиотека утверждает, что они поддерживают Uint8Array и ArrayBuffer. Однако, тестируя это, кажется, что они действительно не могут обрабатывать обнаженные ArrayBuffers, поэтому идет с Uint8Array , потому что так говорят документы вашей библиотеки.

...