Blob,ArrayBuffer,File,FileReader,Buffer,TypeArray 的作用和区别

        Blob(Binary Large object)二进制大型对象,是一个相对high-level的概念,一个Blob对象可以包含一个或多个连续内存,通常是由一个或多个ArrayBuffer对象组成的数组;ArrayBufer 与 Buffer 是多对一的关系。


        ArrayBuffer 表示通用的、固定长度的原始二进制数据缓冲区。是一块连续内存,所以是low-level的,你可以将这块内存映射为某种数组(TypedArray)或者是自定义的数据视图(DataView),并通过这些格式来读写缓冲区的内容。


        File 继承 Blob 类,File 对象是特殊类型的 Blob。继承 Blob 的功能并将其扩展使其支持用户系统上的文件。


        FileReader 对象用于读取存储在用户计算机上的文件(或原始数据缓冲区)的内容,使用 File 或 Blob 对象指定要读取的文件或数据。


        Buffer 是 Node.js 中的概念,用于表示固定长度的字节序列。Buffer 继承 Uint8Array 类,是一种操作 ArrayBuffer 的类型数组。 class Buffer extends  Uint8Array{}


        TypeArray 对象是一种用来操作底层二进制数据缓冲区的类数组视图,TypeArray 类是一个“抽象类”。一共包括9种类型,常用的有 Uint8Array, Int8Array, Int16Array, Uint16Array, Int32Array, Uint32Array, Int64Array, Uint64Array, Uint8ClampedArray。


ArrayBuffer Uint8Array Buffer 等不同对象之间的相互转化

1. ArrayBuffer 转 Blob

ArrayBuffer => Uint8Array => Buffer
let buffer =  new Buffer(16);
new Blob([new Uint8Array(buffer, offset, length)]);

2. Blob 转 ArrayBuffer

const reader = new FileReader();
reader.readAsArrayBuffer(blob);
reader.onload = () => {
    return reader.result;
}

3. ArrayBuffer(二进制字节数组)转 Base64 字符串

用途: 对二进制数据进行编码,以便将其纳入 data: URL 中,在网络中进行传输和存储

// btoa():从二进制数据“字符串”创建一个 Base-64 编码的 ASCII 字符串(“btoa”应读作“binary to ASCII”)
const base64Str = btoa(String.fromCharCode.apply(null, new Uint8Array(arrayBuffer))); 

// a 转化为 97 转化为 01100001(8位二进制)输出 YQ==
btoa('a') // YQ==

4. String 转 ArrayBuffer

TextEncoder 对象接受码位流作为输入,并提供 UTF-8 字节流作为输出
const encoder = new TextEncoder();

// encoder.encode()接受一个字符串作为输入,返回一个包含 UTF-8 编码的文本的 Uint8Array
const uint8Array = encoder.encode('hello world!');

// Uint8Array 对象的buffer属性返回 ArrayBuffer 对象
let buf = uint8Array.buffer;

5. String 转 Buffer

Buffer.from('hello world', 'utf8');

6. ArrayBuffer 转 Uint8Array 转 Buffer

const ab = new ArrayBuffer(8);
const arr = new Uint8Array(ab);
arr[0] = 66;
arr[1] = 88;
const buf = Buffer.from(arr.buffer);

const ab = new ArrayBuffer(10);
const buf = Buffer.from(ab, 0, 2);

7. Buffer 转 ArrayBuffer

let buf = Buffer.from('helllo world!', 'utf8');
let arrayBuffer = buf.buffer;	// 利用 buffer 属性

8. Buffer 转 String

let buffer = Buffer.from('Hello World', 'utf8');
let str = buffer.toString('utf8');

9. ArrayBuffer 转 String

let arrayBuffer = new ArrayBuffer(32);
let uint8Array = new Uint8Array(arrayBuffer);
let binaryString = '';
for (let i = 0; i < uint8Array.length; i++) {
    // 根据Unicode 码点转化为字符,fromCodePoint 可识别范围更大
    binaryString += String.fromCharCode(uint8Array[i]);
}
console.log('binaryString', binaryString);

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值