2013-05-14 6 views
2

이상한 경험이 있습니다. 이 배열 버퍼 설정의 데이터를 보낼 때 :JSON은 websocket을 통해 보낼 때 Float32Array 버퍼 크기를 여러 번 늘립니다.

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 형식 버퍼 chunck를 보낼 때

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

I은 ​​55 타단 팽창에있어 버퍼 크기,에 충전 데이터 바이트 17하여 XXX 바이트 xxx는 데이터가 입력되지 않았습니다.

왜 이런 일이 발생하고 버퍼 크기를 낮게 유지해야합니까? 다른 끝에서 렌더링 할 때 스트림이 고르지 않기 때문에이 작업을 수행하려고합니다.

감사합니다.

답변

0

플로트 32 배열은 데이터 구조 내에서 숫자 당 정확히 32 비트가 필요하기 때문에 나는 기대할 것입니다. 그러나 json은 ASCII 형식이므로 각 숫자는 심각한 8 비트 문자로 표시되고 쉼표 및 어쩌면 다시 십진법을 위해 그리고 공백을 구분하기 위해 다시.

예를 들어 데이터 [0.1234545, 111.3242, 523.12341]은 float32array 내에서 표현하기 위해 3 * 32 => 96 비트가 필요하지만 json 문자열은이 예제에서 256 비트가되는 32 문자 각각에 대해 8 비트를 필요로합니다.

+0

나는 이것을 잘 이해하지 못한다. 그러나 상상할 수있다. 데이터가 손실되지 않고 Float32Array를 압축하는 방법이 있습니까? – ket

+0

Float32Array는 사용자가 수행하는 작업에 관계없이 항목 당 4 바이트를 사용합니다. 그러나 서버에서 gzip 압축을 사용하면 데이터를 효율적으로 압축하여 전송할 수 있습니다. – Nat