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



我有一个奇怪的经历。当我发送这个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字节未填充数据。

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

谢谢。

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

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

最新更新