Каков чистый метод создания двоичного буфера в JS?

Мне нужно построить двоичный буфер, состоящий из различных компонентов, в частности, нескольких строк и ArrayBuffer (или производного от него UINT8Array), вставленного между строковыми последовательностями. В идеале создать пустой буфер и последовательно дописать в него все необходимое и в итоге получить накопленный буфер.

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


person Eternity    schedule 15.10.2019    source источник


Ответы (1)


Доступ к ArrayBuffer невозможен, и вы может использовать представления TypedArray или DataView для управления значениями байтов буфера. Вы можете использовать TextEncoder и TextDecoder для упрощения работы с текстом, поддерживаемым ArrayBuffers.

Рассмотрите возможность использования fetch(), который более эффективен, чем старый XMLHttpRequest способы. ArrayBuffer должен быть сериализован в строку для отправки в HTTP-запросе.

const encoder = new TextEncoder();
const encoded = encoder.encode('hello');
const serialized = encoded.toString();
fetch('https://example.com', {
  method: 'post',
  body: serialized
})
person AnthumChris    schedule 20.10.2019
comment
Хорошо спасибо. Можно ли динамически манипулировать объектом TextEncoder() (добавлять новые последовательности), и можете ли вы привести пример, как расширить encoded переменной типа ArrayBuffer? (при условии, что он содержит необработанную последовательность uint8) - person Eternity; 23.10.2019