javascript - 通过 websocket 发送时,JSON 将 Float32Array 缓冲区大小增加了很多倍

标签 javascript arrays websocket arraybuffer typedarray

我有一个奇怪的经历。当我发送此 arraybuffer 设置的数据时:

var f32s = Float32Array(2048);
for (var i = 0; i < f32s.length; i++) {
    f32s[i] = buffer[i]; // fill the array
    ws.send(f32s[i]);
}

我在另一端得到的缓冲区大小是8192字节。 但是当我像下面这样以 JSON 格式发送缓冲区 block 时:

var obj = {
    buffer_id: 4,
    data: f32s[i]
};
var json = JSON.stringify({ type:'buffer', data: obj });            
ws.send(json);

我在另一端得到的缓冲区大小膨胀到 55,xxx 字节有数据填充和 17,xxx 字节没有数据填充。

为什么会发生这种情况以及如何保持较低的缓冲区大小? 我想这样做是因为当我在另一端渲染它时,流是断断续续的。

谢谢。

最佳答案

我预计会发生这种情况,因为 float 32 数组在数据结构中需要每个数字恰好 32 位,但是 json 是一种 ascii 格式,表示每个数字都有 8 位字符,然后是另一个 8 位用于逗号,也许再次用于小数,再次用于定界空格。

因此数据 [0.1234545, 111.3242, 523.12341] 例如需要 3 * 32 => 96 位来表示 float32array,但作为 json 字符串需要 8 位来表示这 32 个字符中的每一个达到 256 位的示例。

关于javascript - 通过 websocket 发送时,JSON 将 Float32Array 缓冲区大小增加了很多倍,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16546654/

相关文章:

python:对元组的算术运算导致TypeError

websocket - Jetty:如何保护 web.xml 中的 websocket 连接?

flash - HTML5 Web 套接字(TCP 连接),带 flash 回退

javascript - React.js : can't get an property in an array of objects in render() function

javascript - Jquery隐藏下拉列表不起作用

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP

java - 如何有效地对一个数组进行排序

javascript - JSP:同一个表单上有两个提交按钮

Javascript 继承最佳策略

linux - 我可以在 Linux 上识别正在进行的 Web 请求吗?