通过websocket发送时,JSON会将Float32Array缓冲区大小增加许多倍

时间:2013-05-14 15:02:09

标签: 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格式的缓冲区时,如下:

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

我在另一端获得的缓冲区大小为 55,xxx 字节,数据填入, 17,xxx 字节,没有数据填充。

为什么会发生这种情况,如何保持缓冲区大小不变? 我想这样做是因为当我在另一端渲染它时,流是不稳定的。

谢谢。

1 个答案:

答案 0 :(得分:0)

我希望这种情况正在发生,因为float 32数组在数据结构中每个数字只需要32位,但json是ascii格式,表示每个数字都有8位字符,然后另外8位用于逗号,也许再次为小数点,再为分隔空格。

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