liujiusheng / blog

个人博客,blog
19 stars 0 forks source link

blob,buffer,Uint8Array,createObjectURL,binar,pbf各种关系的深究 #95

Open liujiusheng opened 6 years ago

liujiusheng commented 6 years ago

为什么node.js读取文件后使用binar格式返回数据时前端的createObjectURL可以直接解析,也可通过new window.Blob转换后再解析。为什么这种情况下前端先用Uint8Array处理数据后再给Blob会出问题? 后端node.js不使用binar格式,不设置返回格式时前端也会出现如上的问题。

blob

Binary large Object,所以,blob就是binary, createObjectURL接受的参数就是一个blob

blob中文名

二进制大对象,所以二进制再转换为二进制它还是二进制,数据并没有改变,所以用了new Blob()转换和没转换效果一样。

node.js读取文件时,readFileSync()方法若不规定返回数据类型,则默认传入null,返回的数据为buffer,buffer也就是二进制,与传入binar一样。

Uint8Array

8位无符号整数数组,也就是说在二进制情况下以8位代表一个数,如11111111,Uint8Array的范围为 0 ~ 256。

Int8Array

则表示带符号的8位二进制整数数组,范围为-128~127。

其它以此类推。

buffer代表一个二进制的数流,可以以任意方式切割。比如切割成Uint8Array.

传统上,服务器通过 AJAX 操作只能返回文本数据,即responseType属性默认为text。XMLHttpRequest第二版XHR2允许服务器返回二进制数据,这时分成两种情况。如果明确知道返回的二进制数据类型,可以把返回类型(responseType)设为arraybuffer;如果不知道,就设为blob。(参考的这里)

ES6中const的特性

如果是值类型,值不可变.如果是引用类型,地址不可变。所以不能用const类型来实现深度复制一个对象,它们还是调用的同一个对象。

application/octet-stream

二进制流,不知道下载文件类型