簡單的說,ArrayBuffer就表明了內存中的一段二進制數據,不能夠直接讀寫,只能夠經過在上面創建TypedArray視圖或DataView視圖來操做這段二進制數據,TypedArray視圖主要用來操做簡單類型的二進制數據,DataView用來操做複雜類型的二進制數據。數組
new ArrayBuffer(length) //length表明長度,單位是字節
創建一個ArrayBuffer就是這麼簡單,固然也能夠有其它數據或對象轉換而來,這裏先不提,如此的一個對象,再借助下面將介紹的二個視圖就能夠好好利用了,不過再此以前,仍是先列舉一下幾個會有用的方法和屬性:函數
TypedArray是用來操做簡單類型的視圖,一個視圖對應一個肯定的類型,而且是連續的,默認爲0。code
該視圖支持的類型以下:對象
每種類型都有一個構造函數,用來生成對應的視圖,所以其實TypedArray實際上是這些視圖爲了方便的一個統一稱呼。內存
上面提到的每一個構造函數傳遞的參數有不少中,下面列舉經常使用的四種:get
除了個別例外(好比concat方法),視圖對象的操做和普通數組的操做基本差很少,這裏給出一個例子:console
var arrayBuffer = new ArrayBuffer(6);//申請6個字節的內存空間 var int8Array = new Int8Array(arrayBuffer, 0, 2);//使用了2字節的空間 var int16Array = new Int16Array(arrayBuffer, 2, 2);//使用了4字節的空間 int8Array[0] = 1; int16Array[0] = 2; int16Array[1] = 3; console.log(int8Array); //Int8Array(2) [1, 0] console.log(int16Array); //Int16Array(2) [2, 3]
new DataView(ArrayBuffer實例對象[,字節起始位置[,長度]])
和TypedArray有很大區別的是,這裏咱們在使用的時候可能要去關注一下大端仍是小端保存或讀取數據。構造函數
若是說的簡單點,其實DataView就是一個很是很是厲害視圖,提供了不少方法,不像TypedArray視圖須要創建對應視圖而後讀取,你能夠調用DataView的實例對象上的方法就能夠實現TypedArray哪些各類視圖的功能,所以,你可能會涉及到這些方法:二進制
讀數據的方法包括:getInt八、getUint八、getInt1六、getUint1六、getInt3二、getUint3二、getFloat3二、getFloat64。方法
帶二個參數,第一個參數表示讀取的開始位置,第二個參數表示是大端讀取(false)仍是小端讀取(true)。
寫數據的方法包括:setInt八、setUint八、setInt1六、setUint1六、setInt3二、setUint3二、setFloat3二、setFloat64。
帶三個參數,第一個參數表示寫入的開始位置,第二個參數表示寫入的數據,第三個參數表示是大端寫入(false)仍是小端寫入(true)。