我有一个奇怪的经历。当我发送这个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位。