javascript - 二进制流到 Uint8Array - JavaScript

标签 javascript angularjs uint8t binarystream

我从 HTTP 请求中接收到以下二进制流:

HTTP 请求

Document.get({id: $scope.documentId}, function(stream){

});

Angular 工厂

.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
            }
        });
    }
]);

回应

控制台日志(流) 我需要将其转换为 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) 但我得到“无法在‘Window’上执行‘btoa’:要编码的字符串包含 Latin1 范围之外的字符。”

如何将其转换为 Uint8Array?

最佳答案

所以你有一个二进制流(我假设值是从某种字节数组发送的,0-255)。在将其转换为 Uint8Array 之前,您无需执行(window.btoa(...),因为它已经处于为 Uint8Array 准备就绪的状态)。

您只需要遍历Object 的 索引(存储在从0 开始递增的键中)并设置Uint8Array 的值,获取每个索引处的字符代码,并设置该索引处的 Uin8Array 单元格的值。

您需要知道 Key 的数量,这可以通过 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);
}

updated your fiddle ,您可以在控制台中记录它是如何转换的。我还 chop 了字符串,因为我厌倦了查找所有 ' 字符并尝试将它们转义并添加 \n 字符以便它们都在一行上。

关于javascript - 二进制流到 Uint8Array - JavaScript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28482359/

相关文章:

javascript - 访问数组中的对象值

php - 将 javascript 调用转换为 php 的最有效方法(与 Wordpress 无限滚动/社交按钮问题相关)

javascript - AngularJS 重复列表中的数据

angularjs - 访问指令 Controller 内部所需的 Controller 的正确方法是什么?

c - 如何在不违反 MISRA 规则的情况下将位域变量分配给 uint8_t 变量?

flutter - Dart : Index out of range: index should be less than N: N (where N is the size of file in bytes). 如何修复此运行时错误?

javascript - JSSOR 网格 slider 中的项目符号和箭头导航器存在问题

node.js - 为什么全新安装 node.js 和 Protractor 会出现 `execvp` No such file or directory 错误?

Javascript快速读取本地文件到UInt8Array

javascript - 尝试添加新对象时,我的 javascript 数组不断被覆盖