ArrayBuffer详细介绍

2024-01-23 18:12
文章标签 介绍 详细 arraybuffer

本文主要是介绍ArrayBuffer详细介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ArrayBuffer

ArrayBuffer 对象用来表示通用的原始二进制数据缓冲区。

它是一个字节数组,通常在其他语言中称为“byte array”。你不能直接操作 ArrayBuffer 中的内容;而是要通过类型化数组对象或 DataView 对象来操作,它们会将缓冲区中的数据表示为特定的格式,并通过这些格式来读写缓冲区的内容。

相比于普通的 JavaScript 数组,ArrayBuffer 对象不会自动改变大小,这使得它更适合处理二进制数据,例如图像、音频、视频以及网络通信中的数据传输等

ArrayBuffer() 构造函数创建一个以字节为单位的给定长度的新 ArrayBuffer。你也可以从现有的数据(例如,从 Base64 字符串或者从本地文件)获取数组缓冲区。

ArrayBuffer 是一个可转移对象。

创建 ArrayBuffer

要创建一个新的 ArrayBuffer 实例,需要使用 ArrayBuffer 构造函数,并传入一个表示字节长度的整数值作为参数。例如,创建一个长度为 8 字节的 ArrayBuffer:

const buffer = new ArrayBuffer(8);

操作 ArrayBuffer

一旦创建了 ArrayBuffer,我们可以使用 DataView 或 TypedArray 来读取和写入其中的数据。

使用 DataView

DataView 对象提供了一种灵活的方式来读取和写入 ArrayBuffer 中的数据。可以使用 DataView 的方法来指定偏移量和数据类型,以读取或写入特定位置的数据。

下面是一个使用 DataView 进行读写操作的示例:

const buffer = new ArrayBuffer(8);
const view = new DataView(buffer);// 写入数据
view.setInt8(0, 42); // 在索引 0 处写入一个 8 位带符号整数// 读取数据
const value = view.getInt8(0); // 从索引 0 处读取一个 8 位带符号整数
console.log(value); // 输出: 42
使用 TypedArray

TypedArray 是一组特定类型的数组对象,它们被用来操作 ArrayBuffer 中的数据。不同的 TypedArray 对象对应于不同的数据类型,例如 Int8Array、Uint8Array、Int16Array、Float32Array 等等。

下面是一个使用 TypedArray 进行读写操作的示例:

const buffer = new ArrayBuffer(8);
const array = new Int8Array(buffer);// 写入数据
array[0] = 42; // 在索引 0 处写入一个 8 位带符号整数// 读取数据
const value = array[0]; // 从索引 0 处读取一个 8 位带符号整数
console.log(value); // 输出: 42

示例案例:计算数组平均值

下面是一个使用 ArrayBuffer 和 TypedArray 计算数组平均值的具体案例:首先创建一个包含 100 个随机数的数组,然后创建一个与数组长度相同的 ArrayBuffer,并使用 Float64Array 将数组数据拷贝到 ArrayBuffer 中。最后,使用 TypedArray 对象计算数组平均值并输出结果。

// 创建一个包含 100 个随机数的数组
const array = new Array(100).fill(0).map(() => Math.random() * 100);// 创建一个与数组长度相同的 ArrayBuffer
const buffer = new ArrayBuffer(array.length * Float64Array.BYTES_PER_ELEMENT);// 使用 Float64Array 将数组数据拷贝到 ArrayBuffer
const view = new Float64Array(buffer);
for (let i = 0; i < array.length; i++) {view[i] = array[i];
}// 使用 TypedArray 计算平均值
const sum = view.reduce((acc, val) => acc + val, 0);
const average = sum / array.length;console.log(average);

通过上述介绍和案例,我们可以看到 ArrayBuffer 在处理二进制数据时的高效性和灵活性。它为 JavaScript 开发者提供了更多处理原始二进制数据的能力,使得处理图像、音频、视频等应用场景更加便捷。

这篇关于ArrayBuffer详细介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/637101

相关文章

Python中win32包的安装及常见用途介绍

《Python中win32包的安装及常见用途介绍》在Windows环境下,PythonWin32模块通常随Python安装包一起安装,:本文主要介绍Python中win32包的安装及常见用途的相关... 目录前言主要组件安装方法常见用途1. 操作Windows注册表2. 操作Windows服务3. 窗口操作

SpringBoot整合liteflow的详细过程

《SpringBoot整合liteflow的详细过程》:本文主要介绍SpringBoot整合liteflow的详细过程,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋...  liteflow 是什么? 能做什么?总之一句话:能帮你规范写代码逻辑 ,编排并解耦业务逻辑,代码

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机

c++中的set容器介绍及操作大全

《c++中的set容器介绍及操作大全》:本文主要介绍c++中的set容器介绍及操作大全,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录​​一、核心特性​​️ ​​二、基本操作​​​​1. 初始化与赋值​​​​2. 增删查操作​​​​3. 遍历方

HTML img标签和超链接标签详细介绍

《HTMLimg标签和超链接标签详细介绍》:本文主要介绍了HTML中img标签的使用,包括src属性(指定图片路径)、相对/绝对路径区别、alt替代文本、title提示、宽高控制及边框设置等,详细内容请阅读本文,希望能对你有所帮助... 目录img 标签src 属性alt 属性title 属性width/h

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比

《CSS中的Static、Relative、Absolute、Fixed、Sticky的应用与详细对比》CSS中的position属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布... css 中的 position 属性用于控制元素的定位方式,不同的定位方式会影响元素在页面中的布局和层叠关

在Windows上使用qemu安装ubuntu24.04服务器的详细指南

《在Windows上使用qemu安装ubuntu24.04服务器的详细指南》本文介绍了在Windows上使用QEMU安装Ubuntu24.04的全流程:安装QEMU、准备ISO镜像、创建虚拟磁盘、配置... 目录1. 安装QEMU环境2. 准备Ubuntu 24.04镜像3. 启动QEMU安装Ubuntu4

SpringBoot整合Flowable实现工作流的详细流程

《SpringBoot整合Flowable实现工作流的详细流程》Flowable是一个使用Java编写的轻量级业务流程引擎,Flowable流程引擎可用于部署BPMN2.0流程定义,创建这些流程定义的... 目录1、流程引擎介绍2、创建项目3、画流程图4、开发接口4.1 Java 类梳理4.2 查看流程图4

SQL Server数据库死锁处理超详细攻略

《SQLServer数据库死锁处理超详细攻略》SQLServer作为主流数据库管理系统,在高并发场景下可能面临死锁问题,影响系统性能和稳定性,这篇文章主要给大家介绍了关于SQLServer数据库死... 目录一、引言二、查询 Sqlserver 中造成死锁的 SPID三、用内置函数查询执行信息1. sp_w