對於js中網絡接口websocket,二進制數組arraybuffer,視圖對象dataview學習記錄。

1.關於WebSocket對象,他的協議頭不是http://,而是ws:// 

服務器傳遞到客戶端的數據可能是字符串,所以我們要判斷一下,是否數據是字符串

onMessage:function (evt)
    {
        if(typeof(evt.data)=="string")            //服務器傳過來的可能是字符串,判斷是不是
        {
            cc.log("typeof(evt.data)");
        }
        else
        {
            cc.log(evt.data);
            vardview= newDataView(evt.data);
            varreadPos= 0;
            varmainCode= dview.getUint16(readPos,true); readPos +=2;
            varsubCode= dview.getUint16(readPos,true);  readPos +=2;
            MahjongSocket.instances.onMsg(mainCode,subCode,dview, readPos);
        }

    },

也可能是二進制的數據,(blob或者是arraybuffor),一個websocket只能接收一種二進制數據,要麼是blob,要麼是arraybuffer,但是默認是blob,但是我們可以通過   WebSocket對象的一個屬性binaryType指定接收的二進制類型。ws.binaryType="arraybuffer";       那麼這時指定接收的二進制數據就是ArrayBuffer

 

2.ArrayBuffer            

var  bf = new ArrayBuffer(4);        //ArrayBuffer是存放二進制數據的數組,這裏的參數4是指創建的數組長度是4個字節。

bf.typeLength               //ArrayBuffer對象數組有一個參數,typeLength。表示給數組分配的字節長度

要注意一點,這個二進制數組創建時分配的內存是連續的,如果要求的內存比較大,那麼可能分配不成功,所以我們使用他時我們要檢驗一下

 

3.DataView

服務器傳來的二進制數據中包含了多種數據類型,二進制數組ArrayBuffer自身不能進行操作(讀取,設置),我們可以把它傳入DataView對象進行操作

var dv = new DataView(bf);

dv.getInt32(pos,true);   //從ArrayBuffer數組的下標處開始讀取一個32位二進制數,轉化爲整數

dv.set(pos,1,true);   //在ArrayBuffer數組的pos下標處開始設置一個32位二進制,把1轉化成二進制

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章