Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 当通过websocket发送时,JSON将数组缓冲区大小增加了很多倍_Javascript_Arrays_Websocket_Arraybuffer_Typedarray - Fatal编程技术网

Javascript 当通过websocket发送时,JSON将数组缓冲区大小增加了很多倍

Javascript 当通过websocket发送时,JSON将数组缓冲区大小增加了很多倍,javascript,arrays,websocket,arraybuffer,typedarray,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]); } 我在另一端得到的缓冲区大小膨胀到55,xxx字节(数据已填充)和17,xxx字节(未填充数据) 为什么会发生这种情况,以及如何保持缓冲区大小较低?

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

var f32s = Float32Array(2048);
for (var i = 0; i < f32s.length; i++) {
    f32s[i] = buffer[i]; // fill the array
    ws.send(f32s[i]);
}
我在另一端得到的缓冲区大小膨胀到55,xxx字节(数据已填充)和17,xxx字节(未填充数据)

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


谢谢。

我预计会发生这种情况,因为浮点32数组在数据结构中要求每个数字正好32位,而json是ascii格式,它用8位字符表示每个数字,然后用8位字符表示逗号,也可能用8位字符表示小数,再用8位字符表示分隔空格


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

虽然我不太明白这一点,但这是可以想象的。是否有压缩Float32Array而不丢失数据的方法?无论您做什么,Float32Array都将使用每个项4个字节。但是,通过在服务器上启用gzip压缩,可以有效地压缩数据以进行传输。
var obj = {
    buffer_id: 4,
    data: f32s[i]
};
var json = JSON.stringify({ type:'buffer', data: obj });            
ws.send(json);