Skip to content

JavaScript 二进制数组(应用)

AJAX

XMLHttpRequest 第一版 responseType 属性默认为 text。

XMLHttpRequest 第二版 XHR2 允许服务器返回二进制数据,这时分成两种情况:

  • 已知二进制数据类型:responseType 设为 arraybuffer。
  • 未知二进制数据类型:responseType 设为 blob。
javascript
var xhr = new XMLHttpRequest();
xhr.open("GET", someUrl);
xhr.responseType = "arraybuffer";

xhr.onload = function () {
  let arrayBuffer = xhr.response;
  // ···
};

xhr.send();
var xhr = new XMLHttpRequest();
xhr.open("GET", someUrl);
xhr.responseType = "arraybuffer";

xhr.onload = function () {
  let arrayBuffer = xhr.response;
  // ···
};

xhr.send();

Canvas

首先看下面的例子:

javascript
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 数组
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。

WebSocket

WebSocket 可以通过 ArrayBuffer,发送或接收二进制数据。

javascript
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;
  // ···
});
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 对象。

javascript
fetch(url)
  .then(function (request) {
    return request.arrayBuffer();
  })
  .then(function (arrayBuffer) {
    // ...
  });
fetch(url)
  .then(function (request) {
    return request.arrayBuffer();
  })
  .then(function (arrayBuffer) {
    // ...
  });

File API

如果知道一个文件的二进制数据类型,也可以将这个文件读取为 ArrayBuffer 对象。

javascript
var fileInput = document.getElementById("fileInput");
var file = fileInput.files[0];
var reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function () {
  var arrayBuffer = reader.result;
  // ···
};
var fileInput = document.getElementById("fileInput");
var file = fileInput.files[0];
var reader = new FileReader();
reader.readAsArrayBuffer(file);
reader.onload = function () {
  var arrayBuffer = reader.result;
  // ···
};

最后编辑时间:

Version 4.0 (framework-1.0.0-rc.20)