js文件处理 Blob File Buffer TypedArray ArrayBuffer之间的关系
官方文档
Blob File Buffer Buffer.from Buffer.from TypedArray ArrayBuffer
关系
继承关系
Buffer 是 node 中的类型 Buffer 继承于 Uint8Array Uint8Array 继承于 TypedArray (或者说是其中一种实现 TypedArray 不能直接new ) TypedArray 有以下类型
- Int8Array
- Uint8Array
- Uint8ClampedArray
- Int16Array
- Uint16Array
- Int32Array
- Uint32Array
- Float32Array
- Float64Array
- DataView ArrayBufferView 就是 TypedArray File 继承于 Blob
转换关系
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