arraybuffer操作_JavaScript - ArrayBuffer 介绍

什么是 ArrayBuffer

JavaScript 中最基础的二进制对象 ArrayBuffer,可以表示对固定长度的连续内存的引用,但是用户不能直接操作这块内存,必须通过 "View Object" 来操作。

let buffer = new ArrayBuffer(16); // 创建长度为 16 byte 的连续内存

其中 “View Object" 大致可以分为两类

  • TypedArray
  • DataView

其中,DataView 指的是自定自定义的解析器,不作详细讨论。
TypedArray 有一下几种

  • Uint8Array, Uint16Array, Uint32Array
    • – for unsigned integers of 8, 16, and 32 bits.
  • Uint8ClampedArray
    • – for 8-bit integers, “clamps” them on assignment.
  • Int8Array, Int16Array, Int32Array
    • – for signed integer numbers (can be negative).
  • Float32Array, Float64Array
    • – for signed floating-point numbers of 32 and 64 bits.

栗子

Unit8Array

  • 指的是,把 ArrayBuffer 的每个 byte(8-bit) 当作一个单独的无符号整型数字 (0 - 255)

比如我们用下面的代码创建一个数组,那这个数组底层使用 ArrayBuffer 实现的,一共占用了 4 byte 的内存

let arr = new Uint8Array([10, 11, 12, 13]);
alert(arr.length); // 4, created binary array of the same length
alert(arr[1]); // 11, filled with 4 bytes (unsigned 8-bit integers) with given values

总结

同理

  • Unit16Array 表示为使用 16 bits (2 bytes) 表示一个无符号整型 (0 ~ 2^16-1) 的数的数组
  • Int8Array 表示使用 8 bits 表示一个有符号整型 (-128 ~ 127)
  • Float32Array 表示使用 32 bits 表示一个浮点数
  • Unit7ClampedArray 在 0 ~ 255 范围内和 Unit8Array 是一样的,对超出范围的处理有所不同,和图像处理相关(一般像素范围也是 0 ~ 255)

下图是一个方便对照的图表

d84f58701916e675f4442ae3c8ae242d.png

Ref

  • https://javascript.info/arraybuffer-binary-arrays
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值