跳到主要内容

js文件处理 Blob File Buffer TypedArray ArrayBuffer之间的关系

官方文档

Blob File Buffer Buffer.from Buffer.from TypedArray ArrayBuffer

关系

继承关系

Buffer 是 node 中的类型 Buffer 继承于 Uint8Array Uint8Array 继承于 TypedArray (或者说是其中一种实现 TypedArray 不能直接new ) TypedArray 有以下类型

转换关系

ArrayBuffer 类型转换中的关键! 可以转换为任何类型, 其他类型也可以转化为 ArrayBuffer

Buffer.from 接收 ArrayBuffer 转换为 Buffer Buffer.buffer 可以获取到 ArrayBuffer

Uint8Array.buffer 可以获取到 ArrayBuffer new Uint8Array 接收 ArrayBuffer 可以转化为 Uint8Array

new Blob 和 File 都可以接收 ArrayBuffer,ArrayBufferView,Blob 生成参数 Blob.arrayBuffer() 返回一个 promise 且包含 blob 所有内容的二进制格式的 ArrayBuffer

// Uint8Array | ArrayBufferView | TypedArray
const buffer = new ArrayBuffer(8);
const uint8 = new Uint8Array(buffer)
uint8.buffer === buffer // true
// node buffer
const buffer = new ArrayBuffer(8);
const buf = Buffer.from(buffer)
buf.buffer === buffer // true
// Blob
const buffer = new ArrayBuffer(8);
let blob = new Blob([buffer])
blob.arrayBuffer().then((buf=>console.log(buf))) // buf !== buffer
// File
const buffer = new ArrayBuffer(8);
let file = new File([buffer],"file.xxx")
file.arrayBuffer().then((buf=>console.log(buf))) // buf !== buffer