说实话自从作了前端以后,还没怎么用过二进制数组,看了es6入门以后才知道原来二进制数组的用处还很多。javascript
一、AJAX前端
XMLHttpRequest
初版responseType
属性默认为text
。java
XMLHttpRequest
第二版XHR2
容许服务器返回二进制数据,这时分红两种状况:es6
已知二进制数据类型:responseType
设为arraybuffer
。canvas
未知二进制数据类型:responseType
设为blob
。数组
var xhr = new XMLHttpRequest(); xhr.open('GET', someUrl); xhr.responseType = 'arraybuffer'; xhr.onload = function () { let arrayBuffer = xhr.response; // ··· }; xhr.send();
二、Canvas服务器
首先看下面的例子:socket
var canvas = document.getElementById('myCanvas'); var ctx = canvas.getContext('2d'); var imageData = ctx.getImageData(0, 0, canvas.width, canvas.height); var uint8ClampedArray = imageData.data; //Canvas元素输出的二进制像素数据,也是TypedArray数组
须要注意的是:Uint8ClampedArray
这个类型是针对Canvas元素的专有类型,它是专门针对颜色,取值只能是0~255。fetch
三、WebSocketui
WebSocket
能够经过ArrayBuffer
,发送或接收二进制数据。
var socket = new WebSocket('ws://127.0.0.1:8081'); socket.binaryType = 'arraybuffer'; // 等待直到socket打开 socket.addEventListener('open', function (event) { // 发送二进制数据 var typedArray = new Uint8Array(4); socket.send(typedArray.buffer); }); // 接受二进制数据 socket.addEventListener('message', function (event) { var arrayBuffer = event.data; // ··· });
四、Fetch API
Fetch API
取回的数据,就是ArrayBuffer
对象。
fetch(url) .then(function(request){ return request.arrayBuffer() }) .then(function(arrayBuffer){ // ... });
五、File API
若是知道一个文件的二进制数据类型,也能够将这个文件读取为ArrayBuffer
对象。
var fileInput = document.getElementById('fileInput'); var file = fileInput.files[0]; var reader = new FileReader(); reader.readAsArrayBuffer(file); reader.onload = function () { var arrayBuffer = reader.result; // ··· };