二进制流到 Uint8Array - JavaScript
Binary Stream To Uint8Array - JavaScript
我从 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
}
});
}
]);
回应
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)));
当我 运行 这样做时,我得到一个错误 'malformed uri exception'。我也试过 window.btoa(dataString) 但我得到“无法在 'Window' 上执行 'btoa':要编码的字符串包含 Latin1 范围之外的字符。”
如何将其转换为 Uint8Array?
所以你有一个二进制流(我假设的值是从某种字节数组发送的,0-255)。在将它变成 Uint8Array
.
之前,您不需要执行(window.btoa(...)
因为它已经处于为 Uint8Array 准备好的状态)
你只需要遍历 Object's
个索引(存储在 key 从 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,你可以在控制台记录它是如何转换的。我还截断了字符串,因为我厌倦了查找所有 '
个字符并试图将它们转义并添加 \n
个字符,因此它们都在一行上。
我从 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
}
});
}
]);
回应
console.log(流)
// Convert Binary Stream To String
var dataString = JSON.stringify(stream);
// Convert to Base 64 Data
var base64Data = window.btoa(unescape(encodeURIComponent(dataString)));
当我 运行 这样做时,我得到一个错误 'malformed uri exception'。我也试过 window.btoa(dataString) 但我得到“无法在 'Window' 上执行 'btoa':要编码的字符串包含 Latin1 范围之外的字符。”
如何将其转换为 Uint8Array?
所以你有一个二进制流(我假设的值是从某种字节数组发送的,0-255)。在将它变成 Uint8Array
.
window.btoa(...)
因为它已经处于为 Uint8Array 准备好的状态)
你只需要遍历 Object's
个索引(存储在 key 从 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,你可以在控制台记录它是如何转换的。我还截断了字符串,因为我厌倦了查找所有 '
个字符并试图将它们转义并添加 \n
个字符,因此它们都在一行上。