Двоичный поток в Uint8Array - JavaScript
Я получаю следующий двоичный поток из HTTP-запроса:
ЗАПРОС HTTP
Document.get({id: $scope.documentId}, function(stream){
});
Угловая Фабрика
.factory('Document', ['$resource', 'DOCUMENTS_CONFIG',
function($resource, DOCUMENTS_CONFIG) {
return $resource(DOCUMENTS_CONFIG.DETAIL_URL, {}, {
get: {
method: 'GET',
params: {},
url: DOCUMENTS_CONFIG.DETAIL_URL,
isArray: false
}
});
}
]);
отклик
console.log(поток)Мне нужно преобразовать это в Uint8Array. Я пытался преобразовать его в bas64
// Convert Binary Stream To String
var dataString = JSON.stringify(stream);
// Convert to Base 64 Data
var base64Data = window.btoa(unescape(encodeURIComponent(dataString)));
Когда я запускаю это, я получаю сообщение об ошибке "Искаженное исключение URI". Я также пробовал window.btoa(dataString), но получаю сообщение "Не удалось выполнить btoa" в "Окне": кодируемая строка содержит символы вне диапазона Latin1. '
Как я могу преобразовать это в массив Uint8Array?
1 ответ
Итак, у вас есть двоичный поток (я предполагаю, что значения были отправлены из какого-то байтового массива, 0-255). Вам не нужно делать (window.btoa(...)
потому что он уже находится в состоянии, готовом для Uint8Array), прежде чем превратить его в Uint8Array
,
Вам просто нужно перебрать Object's
индексы (которые хранятся в ключе с возрастающим значением от 0) и устанавливают значение Uint8Array, захватывая код символа в каждом индексе и устанавливая ячейку Uin8Array в этом индексе в значение.
Вам нужно знать количество ключей, это можно сделать с помощью Object.keys(stream).length
, Затем мы повторяем наше значение ключа (i
) и захватить charCode(0)
в нуле (потому что значение для каждого ключа является 1-символьной строкой).
var bytes = Object.keys(stream).length;
var myArr = new Uint8Array(bytes)
for(var i = 0; i < bytes; i++){
myArr[i] = stream[i].charCodeAt(0);
}
Я обновил вашу скрипку, вы можете в журнале консоли, как она конвертирует. Я также обрезал строку, потому что я устал от поиска всех '
персонажи и пытаются избежать их и добавив \n
символы, так что все это будет в одной строке.