1. 程式人生 > >對於js中網路介面websocket,二進位制陣列arraybuffer,檢視物件dataview學習記錄。

對於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轉化成二進位制

相關推薦

對於js網路介面websocket二進位制陣列arraybuffer檢視物件dataview學習記錄

1.關於WebSocket物件,他的協議頭不是http://,而是ws://  伺服器傳遞到客戶端的資料可能是字串,所以我們要判斷一下,是否資料是字串 onMessage:function (evt)     { if(typeof(evt.data)=="string"

JS創建10個a標簽點擊彈出對應的序號

spa app inner i++ 10個 click type lis pen <script type="text/javascript"> for(var i=0;i<10;i++){ (function

JS的邏輯運算符&&、||位運算符|&

位運算 運算 efi mage amp 其他 同時 進行 總結 1、JS中的||符號: 運算方法: 只要“||”前面為false,不管“||”後面是true還是false,都返回“||”後面的值。 只要“||”前面為true,不管“||”後面是true還

js那些不太引人註意又比較常識的坑

rap 大神 javascrip 變量名 什麽 並不是 簡單 style 小夥伴 跟javascript打交道這麽多年,對於js這個弱類型的語言,可以說是又愛又恨,雖說現在很多關於前端的強大插件,比如vue,react,ng,jquery,bootstrap等。但在使用的時

(三)vue.jsapi介面的統一管理(參考)

前文我們已經封裝了axios的get請求和post請求,接下來實現對api介面的統一管理 首先在src/request/下新建api.js檔案,然後引入封裝的http.js(get,post) /** * api介面統一管理 */ import { get, post } from './htt

ifconfig---配置和顯示Linux核心網路介面

ifconfig命令被用於配置和顯示Linux核心中網路介面的網路引數。用ifconfig命令配置的網絡卡資訊,在網絡卡重啟後機器重啟後,配置就不存在。要想將上述的配置資訊永遠的存的電腦裡,那就要修改網絡卡的配置檔案了。 語法 ifconfig(引數) 引數 add<地址>:設定網路裝置I

js實現button按鈕變灰不可用可用的方法

按鈕變灰不可用方法:document.getElementById("crop").setAttribute("disabled", true); 按鈕可用方法:document.getElementById("crop").removeAttribute("disabled"); 按

Lwip協議網路介面(netif)無法ping通解決方法

提出問題: 在除錯單板網路通訊的時候,發現: 1、開啟上位機軟體,並連續傳送讀取資料指令。 2、接上網路線,給單板供電,上位機軟體能正確接收到資料;斷開單板電源,重新給單板供電,上位機能正確接收到資料;頻繁幾次開關機測試,上位機依然能正確接收到資料。 3、在單板供電的情況下,帶電插拔

對於jsapply()和call()和push()的理解

apply()和call()專門用於修改this。 先舉一個小例子: <script> function test(){ console.log(this); } window.test(); //列印的結果為Window,說明此時的this指的是w

js三種定義變數的方式const var let的區別

const   var  let區別 1.const 定義的變數不可以修改,而且必須初始化 const  a = 3;正確 const a;錯誤,必須初始化 console.log("函式外const定義a:"+"a");    有值輸出;

js值的基本型別與引用型別以及物件引用物件的淺拷貝與深拷貝

js有兩種型別的值:棧:原始資料型別(undefinen,null,boolead,number,string)堆:引用資料型別(物件,函式和陣列)兩種型別的區別是:儲存位置不同,原始資料型別直接儲存在棧(stack)中的簡單資料段,佔據空間小,大小固定,屬於被頻繁使用的資料,所以放入棧中儲存;引用資料型別儲

JS鮮為人知的問題: [] == ![]結果為true而 {} == !{}卻為false

console.log( [] == ![] ) // true console.log( {} == !{} ) // false 在比較字串、數值和布林值的相等性時,問題還比較簡單。但在涉及到物件的比較時,問題就變得複雜了。最早的ECMAScript中的相等和不相等操作符會在執行比較之前,先將物件

js設定、取、修改、刪除自定義屬性的值

<div class="div-info" testAttr="myAttr" testAttr2="haha"> </div> 1、js中設定自定義屬性。 例如:$(".div-info").attr("testAttr3","houhou

js如何控制所有頁面載入完成後再執行某些方法

做頁面時經常會遇到當前頁面載入完成後,執行某些初始化工作。這時候就要知道如何判斷頁面(包括IFRAME)已經載入完成,程式碼如下: <script language="javascript">       document.onreadystatechange

Unity使用C#遞迴輸出陣列12358...該陣列的生成規律是每一個數字是前兩個數字的和

一、實現思路:第一個數大於等於0,第二個數大於等於第一個數,最後指定一個需要輸出的最後一個數字(該數字用作最後輸出的界限) ①實現指令碼如下: /*** * Title:"XXX" 專案 * 主題:XXX * Description: * 功能:XXX * Date:2018 * Ver

js幾種較常見的陣列迴圈

第一種:for迴圈 var arr = [1,2,3,4,5] for(var i=0;i<arr.length;i++){      console.log(arr[i]); //拿到每一個的值 } 第二種:for...in... v

定義一個數組,陣列初始長度由控制檯獲取 隨後手動給陣列中每個元素賦值,陣列滿後將陣列長度擴充二倍並輸出清空陣列中所有元素且值繼承陣列長度並重新進行手動新增元素無限死迴圈直至輸出-0後結束程式

package com.tedu; import java.util.Arrays; import java.util.Scanner; /** * 需求: * 定義一個初始陣列,陣列初始長度由控制檯獲取 * 隨後手動給陣列中每個元素賦值,陣列滿後將陣列長度擴充二倍輸

1042B】Vitamins(去重方法二進位制或stlmap水題)

題幹: Berland shop sells nn kinds of juices. Each juice has its price cici. Each juice includes some set of vitamins in it. There are three

js最簡單最實用的陣列去重方法!

js陣列去重是比較常見的陣列操作方式之一,網上有很多關於陣列去重的部落格文章,方法各式各樣,但有些方法實用性很差,很容易造成不必要的麻煩,所以我們需要去其糟粕取其精華,下面我們就整理一些比較實用的陣列去重方法。 一、for迴圈巢狀,利用splice去重 此方法是比較常用的

js間隔一段時間列印陣列的值

間隔一段時間列印陣列中的一個值 在我們的實際操作中,時常會遇到這樣一個問題,比如:有一個數組 arr = [1,2,3,4,5]; 要求間隔1s中列印陣列中的一個值,與停止1s在列印陣列中的值 先列舉兩個停止1s列印陣列中的值 利用for迴圈和定時器來實現