Двоичный поток в 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 символы, так что все это будет в одной строке.

Другие вопросы по тегам