js解釋資料包
做一個項目,伺服器要給我發一個資料包,格式為,前面16位short,後32位int,後面就全是string,我用javascript怎麼去把這個資料包解讀出來? 用WebSocket,接收到的就是一個Blob對象.而我要給伺服器返回的也是這種格式,我又怎麼把我的資料封裝成這樣的資料包?
------解決方案--------------------
var reader = { readAs: function(type,blob,cb){
var r = new FileReader();
r.onloadend = function(){ if(typeof(cb) === 'function') { cb.call(r,r.result); } } try{ r['readAs'+type](blob); }catch(e){} }}
function parseBlob(blob){ var shortVar, intVar, stringVar; reader.readAs('ArrayBuffer',blob.slice(0,2),function(arr){ shortVar = (new Int16Array(arr))[0]; console.log(shortVar); });
reader.readAs('ArrayBuffer',blob.slice(2,6),function(arr){ intVar = (new Int32Array(arr))[0]; console.log(intVar); });
reader.readAs('Text',blob.slice(6,blob.size,'text/plain;charset=UTF-8'),function(result){ stringVar = result; console.log(stringVar); });}
var buffer = new ArrayBuffer(6);//建立6個位元組的緩衝,前兩個位元組是short,後四個是intvar bufferView = new Int16Array(buffer); //建立16位的視圖,那麼視圖的長度應該是3bufferView[0] = 32767;bufferView[1] = 0;bufferView[2] = 1; //現在buffer中的內容由低位到高位應該是 //11111111 11111110 00000000 00000000 100000000 00000000var blob = new Blob([bufferView,"words words 文本文本文本文本"]);//構造這個blob類型//測試一下parseBlob函數是否正確parseBlob(blob);//32767//65536//words words 文本文本文本文本//第一個short是32767//第二個int,前16位為0,第17位為1,所以結果是65536//第三個字串,和我們構造blob的時候一樣