对于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转化成二进制

 

 

 

 

 

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