

























在就版本的 JavaScrip中, 是没有读写二进制数据能力的,但随着 es5 中 Blob 对象的引入以及 es6 中 ArrayBuffer 对象、TypedArray 和 DataView 对象的规范化, JS 处理二进制数据的能力大幅度增强,也能直接处理文件流,网络流等二进制 Buffer 数据了。
1、Blob对象
Blob(Binary Large Object)表示二进制类型的大对象。在数据库管理系统中,将二进制数据存储为一个单一个体的集合。Blob 通常是影像、声音或多媒体文件。在 JavaScript 中 Blob 类型的对象表示不可变的类似文件对象的原始数据。 为了更直观的感受 Blob 对象,我们先来使用 Blob 构造函数,创建一个 aBlob 对象:
var aBlob = new Blob(blobParts, options);
type —— 默认值为 "",它代表了将会被放入到 blob 中的数组内容的 MIME 类型。
endings —— 默认值为 "transparent",用于指定包含行结束符 \n 的字符串如何被写入。它是以下两个值中的一个:"native",代表行结束符会被更改为适合宿主操作系统文件系统的换行符,或者 "transparent",代表会保持 blob 中保存的结束符不变。
blob对象的主要属性方法:
属性:
Blob 对象中所包含数据的大小(以字节为单位)。Blob 对象所包含数据的 MIME 类型。如果类型未知,则该值为空字符串。方法:
ReadableStream。USVString。ArrayBuffer。Blob 对象是不可改变的。我们不能直接在一个 Blob 中更改数据,但是我们可以对一个 Blob 进行分割,从其中创建新的 Blob 对象,将它们混合到一个新的 Blob 中。这种行为类似于 JavaScript 字符串:我们无法更改字符串中的字符,但可以创建新的更正后的字符串。
2、File对象
File 对象代表一个文件,用来读写文件信息。它继承了 Blob 对象,或者说是一种特殊的 Blob 对象,所有可以使用 Blob 对象的场合都可以使用它。
我们接触的多数关于 File 的操作都是读取,js也为我们提供了手动创建 File 对象的构造函数:File(bits, name[, options])。
var myFile = new File([], 'file.bin', { lastModified: new Date(2018, 1, 1), }); myFile.lastModified // 1517414400000 myFile.name // "file.bin" myFile.size // 0 myFile.type //
3、FileList 对象
FileList对象是一个类似数组的对象,代表一组选中的文件,每个成员都是一个 File 实例。它主要出现在两个场合。文件控件节点()的files属性,返回一个 FileList 实例。
拖拉一组文件时,目标区的DataTransfer.files属性,返回一个 FileList 实例。
var files = document.getElementById('fileItem').files; files instanceof FileList // true
3、FileReader 对象
FileReader 有以下的实例属性。
其主要方法如下
其中readAsArrayBuffer可以将文件转换为arraybuffer\text\data等
function onChange(event) { var file = event.target.files[0]; var reader = new FileReader(); reader.onload = function (event) { console.log(event.target.result) }; reader.readAsText(file); }
4、ArrayBuffer对象
代表内存之中的一段二进制数据,可以用数组的方法操作内存,ArrayBuffer 是视图或TypeArray的底层缓冲区,不能直接操作ArrayBuffer,需要通过视图或TypeArray来操作它
ArrayBuffer()是一个普通的JavaScript构造函数,可用于在内存中分配特定数量的字节空间。
const buf = new ArrayBuffer(16); // 在内存中分配16 字节 alert(buf.byteLength);
5、TypedArray视图对象
我们无法对ArrayBuffer 进行直接操作,需要通过TypedArray进行操作
共包括 9 种类型的视图,比如Uint8Array(无符号 8 位整数)数组视图, Int16Array(16 位整数)数组视图, Float32Array(32 位浮点数)数组视图等等。
let buf = new ArrayBuffer(32) let int32 = new Int32Array(buf) let uint8 = new Uint8Array(buf) console.log(int32[0]) // 0 console.log(uint8[0]) // 0
// 还可以直接修改
int32[0] = 1 console.log(int32[0]) // 1 console.log(uint8[0]) // 1
6、DataView 对象:
TypedArray只能放置一种数据类型,对于要存放不同的 数据类型,则需要DataView,不同于类型化数组,一个数组只能存放同一类型的数据,DataView 可以在内存中存放不同类型的数据。
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。