我有一种奇怪的经历。当我发送此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 字节,没有数据填充。
为什么会发生这种情况,如何保持缓冲区大小不变? 我想这样做是因为当我在另一端渲染它时,流是不稳定的。
谢谢。
答案 0 :(得分:0)
我希望这种情况正在发生,因为float 32数组在数据结构中每个数字只需要32位,但json是ascii格式,表示每个数字都有8位字符,然后另外8位用于逗号,也许再次为小数点,再为分隔空格。
因此,数据[0.1234545, 111.3242, 523.12341]
例如需要3 * 32 =&gt;在float32array中表示的96位,但作为json字符串,对于本例中的32个字符中的每一个,需要8位,达到256位。