首页 > 其他分享 >ArrayBuffer和Blob有什么区别?

ArrayBuffer和Blob有什么区别?

时间:2024-12-09 09:33:29浏览次数:6  
标签:区别 二进制 ArrayBuffer DataView Blob 数据 底层

ArrayBufferBlob 都是 JavaScript 中用于表示二进制数据的对象,但在用途和底层实现上有所不同。理解它们的关键区别在于如何访问和使用数据。

ArrayBuffer:

  • 底层: ArrayBuffer 代表内存中的一块原始二进制数据,它本身不提供读取或写入数据的方法。 它更像是一个底层的“数据容器”。
  • 访问: 要访问 ArrayBuffer 中的数据,你需要使用类型化数组 (Typed Arrays) 或 DataView。 这些视图提供了以特定格式(例如 Int8、Uint16、Float32 等)解释和操作底层二进制数据的方法。
  • 修改: 通过类型化数组或 DataView 修改数据会直接影响底层的 ArrayBuffer
  • 用途: ArrayBuffer 通常用于需要高性能处理二进制数据的场景,例如:图像处理、网络通信、游戏开发等。 它允许开发者以接近底层的方式操作数据,从而提高效率。

Blob:

  • 底层: Blob 代表不可变的原始数据,它就像一个文件。 你可以把它想象成一个包含二进制数据的“文件对象”,但它不一定与文件系统关联。
  • 访问: 不能直接访问 Blob 的数据。 你需要使用 FileReader API 将其异步读取为各种格式,例如 DataURL、文本或 ArrayBuffer
  • 修改: Blob 是不可变的。 你不能直接修改它。 要修改 Blob 的数据,你需要创建一个新的 Blob。 例如,你可以使用 Blob.slice() 方法创建一个新的 Blob,其中包含原始 Blob 的一部分数据。
  • 用途: Blob 通常用于处理文件或类文件对象,例如:上传文件、下载文件、处理来自网络请求的二进制数据等。 它也常用于创建 ObjectURL,以便在浏览器中显示或播放媒体文件。

总结:

特性 ArrayBuffer Blob
数据性质 内存中的原始二进制数据 不可变的原始数据,类似文件
可变性 可变 (通过 Typed Arrays 或 DataView) 不可变
访问方式 通过 Typed Arrays 或 DataView 通过 FileReader API 异步读取
用途 高性能二进制数据处理 文件操作、网络请求、媒体文件处理

简单比喻:

想象一下 ArrayBuffer 是一块未经加工的木板,你可以用各种工具 (Typed Arrays 和 DataView) 来切割、雕刻它。 而 Blob 则像一个已经做好的木雕,你不能直接修改它,只能用特殊的工具 (FileReader) 来观察它的形状或复制一部分。

希望这个解释能够帮助你理解 ArrayBufferBlob 的区别。

标签:区别,二进制,ArrayBuffer,DataView,Blob,数据,底层
From: https://www.cnblogs.com/ai888/p/18594228

相关文章

  • Array(3)和Array(3, 4)的区别是什么?
    在前端开发中,Array(3)和Array(3,4)创建JavaScript数组的方式不同,导致生成的数组也不同。Array(3):创建一个长度为3的空数组。重要的是,这些元素实际上并没有被赋值,它们处于一种“空槽”状态。当你尝试访问这些元素时,你会看到undefined或空值。可以把它想象成预......
  • 线程与进程的区别和应用场景,以及各种锁的使用
    目录一:线程1:定义2:多线程的优点3:线程切换到底是切换的什么4:什么时候使用多线程5:多线程中锁的使用(线程同步)二:进程1:定义2:多进程的优点3:多进程的应用场景4:进程间通信的方式三:线程和进程哪个好?我先讲一下进程:那还需要线程干嘛?所以我们不能一味的只追求哪个好,而是分......
  • spoil、decompose、decay和rot的区别
    spoil是食物变质:keepthehamfrom spoiling(让火腿不要变质)。变质不等同于腐败,食物馊了就是变质了,但是馊了的食物不见得就长出霉菌。decompose表示有机体腐败时,等同于rot。rot是鲜活有机体因为细菌或真菌的影响,分解,失去生命力的过程:fruitwasleftto rotinwarehouses(仓......
  • printf返回值有意义吗?输入输出返回值?NSLog和printf的区别?%a和%A格式串?%l %h和%d %o %
    printf返回值有意义吗?利用man3printf获取返回值的解释:Uponsuccessfulreturn,thesefunctionsreturnthenumberofcharactersprinted(excludingthenullbyteusedtoendoutputtostrings).这里提到是返回被成功输出的字符个数,这里的字符特指字节。一般......
  • 位、字节、字符有什么区别?如何换算?
    在前端开发中,位、字节和字符是经常遇到的概念,它们用于衡量数据的大小。理解它们之间的区别和关系至关重要。1.位(bit)位是计算机中最小的数据单位,它只有两种状态:0或1。英文名为bit,简写为b(小写)。一个位可以表示一个二进制数字。2.字节(byte)字节是计算机中常用......
  • js中的undefined和 ReferenceError: xxx is not defined 有什么区别?
    在JavaScript中,undefined和ReferenceError:xxxisnotdefined虽然都表示变量在某种程度上不可用,但它们代表了不同的情况:undefined:表示一个变量已被声明,但尚未赋值。它是一个JavaScript的内置值,表示变量存在于作用域中,但它没有被赋予任何具体的值。letmyVariable;......
  • 主成分分析与因子分析的区别
    两种都是场景且古老的降维方法。主成分分析强调因子最大化地离散程度,从数据角度上的聚集程度,较难显示出业务上的含义。因子分析则强调因子相关性的聚集,降维后的结果更容易从业务角度进行解释和理解。   ......
  • know和know about的区别 基于coca corpus
    know-about/knowabout+*由于这样搜索导致coca出不来结果(耗时太长只能基于ngrams了 基于3gram不过结果有点少n'tknowabout,3249toknowabout,3038knowaboutthe,1731youknowabout,1002knowaboutit,931weknowabout,865knowaboutthat,759Iknowabou......
  • c++领域展开第二幕——入门基础(引用的概念和使用以及和指针的区别)超详细!!!!
    文章目录前言一、引用1.1引用的概念和定义1.2引用的特性1.3引用的使用1.4const引用1.5指针和引用的关系总结前言上一篇学习了c++入门的一些基础部分语法,今天还有基础中最重要的一部分——引用对的,没错,今天只有一个内容就是——引用。引用之后就正式开始类......
  • EDR、NDR、TDR、XDR和MDR的对比表格,展示它们在功能、应用和覆盖范围上的主要区别:
    EDR、NDR、TDR、XDR和MDR的对比表格,展示它们在功能、应用和覆盖范围上的主要区别:类别EDR(EndpointDetectionandResponse)NDR(NetworkDetectionandResponse)TDR(ThreatDetectionandResponse)XDR(ExtendedDetectionandResponse)MDR(ManagedDetectionand......