本系列文章是本人学习相关知识时所积累的笔记,以记录自己的学习历程,也为了方便回顾知识;故文章内容较为随意简练,抱着学习目的来的同学务必转移他处,以免我误人子弟~

参考资料
mdn: blob
ArrayBuffer和TypedArray,以及Blob的使用
简书:JavaScript(ES6) - ArrayBuffer

Blob

Blob是 Web Api,即是只有浏览器才实现。若在nodejs环境中,则没有此对象

  1. // app.js
  2. let blob = new Blob([])
  3. $ node app.js
  4. ReferenceError: Blob is not defined

同理,FormData 也是Web Api,因此在nodejs中也是同样的错误-FormData is not defined
blob是一个不变的、包含原始数据的类文件对象,input[type=file]获取的File对象就是基于 Blob接口;

提取 Blob 的数据

Blob —> ArrayBuffer

ArrayBuffer是 web api ,在nodejs中 Buffer 与之类似

  1. var reader = new FileReader();
  2. reader.addEventListener("loadend", function() {
  3. // reader.result contains the contents of blob as a typed array
  4. let arrayBuffer = reader.result;
  5. });
  6. reader.readAsArrayBuffer(blob);

Blob ArrayBuffer TypedArray 间的相互转换

  1. let arraybuffer = new ArrayBuffer(32)
  2. let intArray = new Int8Array(arraybuffer)
  3. intArray[0] = 97
  4. let blob = new Blob([intArray], {type: "application/octet-binary"});
  5. let fr = new FileReader();
  6. fr.addEventListener("load", function(e) {
  7. let arrayBuffer = e.target.result;
  8. let intArray = new Int8Array(arrayBuffer);
  9. console.log(intArray);
  10. });
  11. //把blob文件转化为arraybuffer;
  12. fr.readAsArrayBuffer(blob)

ArrayBuffer

ArrayBuffer对象代表储存二进制数据的一段内存,它不能直接读写,只能通过视图(TypedArray视图和DataView视图)来读写,视图的作用是以指定格式解读二进制数据。

ArrayBuffer有两种视图,一种是TypedArray视图,另一种是DataView视图。前者的数组成员都是同一个数据类型,后者的数组成员可以是不同的数据类型。