DAY14 - 档案类的物件关系厘清(3) - ArrayBuffer

ArrayBuffer

ArrayBuffer (又称byte-array) 就是一段固定大小的记忆体区块,储存二进位制资料的一段记忆体,是一个个 0/1 组成的串,表示原始二进位制资料缓冲区。所有javaScript引擎内部皆会产生ArrayBuffer。
Ex. buff = new ArrayBuffer(1024) 表示建立的一块1KB的记忆空间。

和Blob一样,是用来储存二进位资料的一种资料格式,可以用来储存各种档案内容,例如 jpg,txt...等,任何你想得到的,都可以用 ArrayBuffer存。那你可能会想,既然和Blob一样,又为什麽要转换成ArrayBuffer呢?後面会再跟大家分享~

特性

ArrayBuffer物件不能直接读写(不能直接操作这个记忆体),只能通过检视(view):TypedArray 和 DataView 来读写。

TypedArray

TypedArray就是为了操作binary data而生。所谓Type指的是「特定的型别」EX: Int8Array, Float32Array

DataView

能用多种不同的型别对 ArrayBuffer 进行修改、解读。Ex:可以指定要从哪个字节开始以及长度

const buffer = new ArrayBuffer(32)
const view = new DataView(buffer, 8, 10) //从8开始,10个长度

DataView 是视图,并不会存放资料,所有的资料皆实际存於ArrayBuffer 物件当中

为什麽有ArrayBuffer

在js中,有些时候会有取得或需处理档案资料的时候,Ex.从XHR拿到一个blob的档案资料、从File API上传一个图档取得file Object、或是从Canvas取得。但档案转换的blob通常会是一大串byte stream。如果用js中的array存取,浪费资源又效率低,因此为了提升js对於二进位的处理能力,便有了arrayBuffer

Blob vs ArrayBuffer

Blob ArrayBuffer
定义 1. 装载数据的二进位资料 1. 是能够装载Blob资料的缓冲区
适用时机 1. 适合整个档案使用 EX.createObjetURL做预览 2. 适合用於传输 1.适用於需要修改某个细节或区段的资料 2.适合做档案读写

除非需要编辑或读写,不然在档案处理时使用Blob是最佳解

  • 编辑读写请使用 ArrayBuffer

参考资料


<<:  [第十四只羊] 迷雾森林舞会VII 开完房间後走进房间

>>:  【Day14-字串】浅谈python中最常用到的str处理方式——格式化、寻找、取代、分割、合并

[Day26]用Canvas打造自己的游乐场-labyrinth 迷雾效果

昨天是把整张地图绘制出来,不过这样一下子就能看清长张地图的路线,缺乏了挑战性,这边要将地图可视范围缩...

Day 3 - 类神经网路(一)

谈到机器学习, 一定会谈到神经元(英语:neuron) 神经元(neuron) 又名神经原或神经细胞...

Day09:程序码编辑器的实用快捷键(1)

一、前言   VSCode 是微软开发的文字编辑器,同时支援 Windows、Linux 和 mac...

Day 20 2D Arrays

在Java程序设计中,有时一维阵列无法计算较多且较复杂的,这时我们需要二维阵列,例如要产生一个阵列A...

Day7 ROS 工具介绍

在前几天我们大概理解了整个 ROS 的架构,接下来要介绍几个 ROS 开发上蛮常用到的工具。 今天主...