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