ArrayBuffer

基本的二进制对象,是对 “固定长度的连续内存空间” 的引用,代表原始的二进制数据,是核心对象,是所有的基础

语法

let buffer = new ArrayBuffer(n)
它会分配一个 n 字节的连续内存空间,并用 0 进行预填充

  • 长度固定
  • 要操作 ArrayBuffer,需要使用“视图”对象(TypedArray 或 DataView)

TypedArray

ArrayBuffer 只是原始的二进制数据,需要透过它来解释存储在 ArrayBuffer 中的字节,相当于读取二进制数据的工具

可以有多种视图方式进行解读:

  • Int8Array:将每 1 个字节视为有符号整型,-128 ~ 127
  • Uint8Array:将每 1 个字节视为无符号整型,0 ~ 255
  • Uint16Array:将每 2 个字节视为一个 0 ~ 65535
  • Uint32Array:将每 4 个字节视为一个 0 ~ 4294967295
  • Float64Array:将每 8 个字节视为一个双精度浮点数

创建

let arrView = new TypedArray( ... ) // TypedArray 是一个代称,实际使用时必须指明具体的类型

读取

具有大部分常规的 Array 方法

写入

arrView.set(arr)

DataView

一种更加灵活地读写 ArrayBuffer 的视图对象

创建

let dataview = new DataView( buffer )

读取/写入

灵活读取和写入,dataview.getXxx()dataview.setXxx()

TypedArray 和 DataView 的区别

TypedArrayDataView
区别 1创建时确定数据格式读取/写入时才确定数据格式
区别 2创建时可以传入多种内容形式创建时只能传入 ArrayBuffer

总结

BufferSource :是“任何类型的二进制数据” —— ArrayBuffer 或其上的视图(都属于 ECMA 标准)

字符串

TextDecoder

将二进制数据解码为字符串

  1. 创建一个解码器:let decoder = new TextDecoder(utfLabel, options)
  2. 进行解码:let str = decoder.decode([input], [options])(input:要被解码的 BufferSource)

TextEncoder

将字符串转换为 Uint8Array 对象

  1. 创建一个编码器:let encoder = new TextEncoder()(只支持 utf-8 编码)
  2. 进行编码:let uint8Array = encoder.encode( str ) (编码为 Uint8Array)

Blob

Binary Large Object:表示一个不可变、原始数据的类文件对象,是 “有类型的二进制数据”(Blob 是浏览器中的规范)

创建

new Blob( blobParts, options )(blobParts:Blob/BufferSource/String 类型的值的数组)

用途

  • 用作 URL,预览或下载文件(很容易用作 <a><img> 或其他标签的 URL)

NOTE

Blob 对象是不可改变的,无法直接在 Blob 中更改数据,但可以通过 slice 获得 Blob 的多个部分,从这些部分创建新的 Blob 对象

File

File 对象继承自 Blob,并扩展了与文件系统相关的功能(如 name 和 lastModified)

创建

  1. 构造函数:new File(bitsArr, fileName[, options])(fileParts:Blob/BufferSource/String 类型值的数组)
  2. input 标签:<input type="file">
  3. 拖拽产生的 DataTransfer 对象

FileReader

FileReader 是一个对象,其唯一用途是从 Blob(因此也从 File)对象中读取数据

创建

let reader = new FileReader() // 没有参数

使用

  1. 按照不同方式进行读取
  • readAsArrayBuffer(blob):将数据读取为二进制格式的 ArrayBuffer
  • readAsText(blob, [encoding]):将数据读取为给定编码(默认为 utf-8 编码)的文本字符串
  • readAsDataURL(blob):读取二进制数据,并将其编码为 base64 的 data url
  1. 监听 load 事件,读取 reader.result 获得结果

Base64

是一种基于 64 个可打印字符来表示二进制数据的表示方法 (Base64 版本通常比其原来的内容大小增加约三分之一)

编解码

  • window.btoa():从二进制数据字符串创建一个 Base64 编码的 ASCII 字符串
  • window.atob():解码通过 Base64 编码的字符串数据

a:ASCII
b:binary

总结