深入浅出理解ArrayBuffer对象TypedArray和DataView视图
目录
举例理解
1. ArrayBuffer对象
2. TypedArray
3. DataView
总结
具体讲解
1. ArrayBuffer对象
2. TypedArray
3. DataView
注意事项
举例理解
先举个简单的例子理解ArrayBuffer对象TypedArray和DataView视图的概念和之间的关系
1. ArrayBuffer对象
想象一个场景:你有一个装满水的长水管,这个水管就是一个
ArrayBuffer。水管里的水是二进制数据,而水管本身则是用来存储这些数据的地方。特点:
- 固定长度:这个水管一旦制作好了,长度就不能再改变。
- 不能直接操作:你不能直接打开水管去喝水(即不能直接读取或修改二进制数据)。但是,你可以通过一些工具来帮助你。
2. TypedArray
继续上面的场景:现在,你想从水管里取水,但是水管太细了,手伸不进去。于是,你使用了一个特制的杯子(
TypedArray),这个杯子有各种大小,可以对应水管里的不同水量。类型:
- Int8Array:像是一个小杯子,每次只能取8位(1字节)的水。
- Uint16Array:像是一个大杯子,每次可以取16位(2字节)的水。
- ……以此类推。
用途:
- 当你需要按照特定的量(类型)来取水(读取数据)或倒水(写入数据)时,就可以使用对应的杯子(
TypedArray)。3. DataView
再次回到场景:但有时候,你可能想从水管的某个特定位置取一点水,或者同时取几种不同量的水。这时,使用杯子就不太方便了,因为杯子只能从头开始取水。
于是,你使用了一个吸管(
DataView)。吸管可以让你选择从水管的哪个位置开始取水,以及取多少。特点:
- 灵活:你可以决定从水管的哪个位置开始,以及取多少水。
- 复杂:相对于杯子(
TypedArray),使用吸管(DataView)可能需要更多的技巧和注意。总结
ArrayBuffer就像是一个装满水的长水管,用来存储二进制数据。TypedArray就像是一个特制的杯子,用来按照特定的量(类型)来取水或倒水。DataView则像是一个吸管,可以灵活地选择从水管的哪个位置开始取水,以及取多少。- 如果ArrayBuffer中存储的二进制类型单一使用TypedArray反之使用DataView
通过以上例子相信你已经大致了解了这三者之间的关系,接下来具体看一下
具体讲解
1. ArrayBuffer对象
用途与特性:
ArrayBuffer对象是一个通用的、固定长度的原始二进制数据缓冲区。它常被用于存储和处理大量的二进制数据,比如图像、音频文件、网络通信中的数据等。
- 固定长度:一旦创建,
ArrayBuffer的大小就不能改变。这意味着,你需要在创建时确定所需的缓冲区大小。- 不能直接操作:你不能直接读写
ArrayBuffer的内容。相反,你需要通过某种类型数组对象(如TypedArray)或DataView对象来访问和修改其中的数据。创建与使用:
你可以使用
ArrayBuffer构造函数来创建一个新的ArrayBuffer对象,指定所需的字节长度作为参数。
const buffer = new ArrayBuffer(16); // 创建一个16字节的ArrayBuffer2. TypedArray
用途与特性:
TypedArray是一种特殊的数组,用于以特定的数值类型来读写ArrayBuffer的内容。它提供了多种类型,如Int8Array、Uint8Array、Float32Array等,用于存储不同范围和精度的数值。
- 与ArrayBuffer关联:
TypedArray对象会关联一个ArrayBuffer,并且其元素会对应到ArrayBuffer的特定部分。- 类型安全:每个
TypedArray都有一个固定的元素类型,这确保了存储的数据类型的一致性。创建与使用:
你可以通过传入一个
ArrayBuffer对象来创建一个TypedArray。
const buffer = new ArrayBuffer(16);const int32View = new Int32Array(buffer); // 创建一个关联到buffer的Int32Array视图你还可以使用
TypedArray的.set()方法来复制数据,或者使用.get()方法来获取数据。3. DataView
用途与特性:
DataView提供了一种用于读写ArrayBuffer内容的低级接口。与TypedArray不同,DataView允许你以任意顺序和字节序来读写ArrayBuffer的不同部分。
- 灵活性:你可以指定偏移量和字节序(大端或小端)来读取或写入数据。
- 低级操作:相比于
TypedArray,DataView提供了更底层的访问方式,但这也意味着操作起来可能更复杂一些。创建与使用:
你可以通过传入一个
ArrayBuffer对象来创建一个DataView。
const buffer = new ArrayBuffer(16);const view = new DataView(buffer); // 创建一个关联到buffer的DataView然后,你可以使用
DataView提供的各种方法来读取或写入数据,如.getInt8()、.setUint16()等。注意事项
- 当使用
TypedArray或DataView来读写ArrayBuffer时,要确保不要越界访问,否则可能会导致不可预测的行为。ArrayBuffer、TypedArray和DataView共享相同的底层二进制数据。因此,对一个视图所做的修改会影响到其他视图和原始的ArrayBuffer。- 当不再需要
ArrayBuffer、TypedArray或DataView时,最好显式地解除对它们的引用,以便垃圾回收器能够回收它们占用的内存。
相关文章:
深入浅出理解ArrayBuffer对象TypedArray和DataView视图
目录 举例理解 1. ArrayBuffer对象 2. TypedArray 3. DataView 总结 具体讲解 1. ArrayBuffer对象 2. TypedArray 3. DataView 注意事项 举例理解 先举个简单的例子理解ArrayBuffer对象TypedArray和DataView视图的概念和之间的关系 1. ArrayBuffer对象 想象一个场景…...
人工智能 - 服务于谁?
人工智能服务于谁? 人工智能服务于生存,其最终就是服务于战争(热战、技术战、经济战) 反正就是为了活着而战的决策。 既然人工智能所有结果,来自大数据的分挖掘(分析)也就是数据的应用&#x…...
软考高级架构师:嵌入式系统的内核架构
作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…...
分布式锁实战
4、分布式锁 4.1 、基本原理和实现方式对比 分布式锁:满足分布式系统或集群模式下多进程可见并且互斥的锁。 分布式锁的核心思想就是让大家都使用同一把锁,只要大家使用的是同一把锁,那么我们就能锁住线程,不让线程进行&#x…...
【VMware Workstation】启动虚拟机报错“此主机支持 AMD-V,但 AMD-V 处于禁用状态”
问题出现步骤: 打开虚拟机: 然后报错: “此主机支持 AMD-V,但 AMD-V 处于禁用状态。 如果已在 BIOS/固件设置中禁用 AMD-V,或主机自更改此设置后从未重新启动,则 AMD-V 可能被禁用。 (1) 确认 BIOS/固件设…...
非关系型数据库(缓存数据库)redis的基础认知与安装
目录 一.关系型数据库和非关系型数据库 关系型数据库 非关系型数据库 关系数据库与非关系型数据库的区别 ①非关系数据 关系型数据库 非关系型数据库产生背景 数据存储流向 非关系型数据库 关系数据库 二.redis的简介 1.概念 2.Redis 具有以下几个优点: 3.Redi…...
Go语言如何处理文件
1.文件的重要性 文件不过是硬盘中的数据,看起来好像没什么了不起,但实际上,文件能够让程序员管理配置、存储程序的状态乃至从底层操作系统中读取数据。 UNIX型操作系统的一个重要特征是,将一切都视为文件。这意味着在操作系统看来,从键盘到打印机的所有东西都可像文件那样…...
Java基础知识总结(42)
(1)Java关键字的相关知识进行了复习 考试过程中“main”是主方法名,而不是Java关键字 (2)类型转换 当一个算术表达式中包含多个基本类型的值时,整个算术表达式的数据类型将发生自动提升,所有的b…...
C++ | Leetcode C++题解之第6题Z字形变换
题目: 题解: class Solution { public:string convert(string s, int numRows) {int n s.length(), r numRows;if (r 1 || r > n) {return s;}string ans;int t r * 2 - 2;for (int i 0; i < r; i) { // 枚举矩阵的行for (int j 0; j i &l…...
JavaEE——手把手教你实现简单的 servlet 项目
文章目录 一、什么是 Servlet二、创建一个简单的 Servlet 程序1. 创建项目2.引入依赖3. 创建目录4.编写代码5. 打包程序6. 部署7.验证整体过程总结 三、使用 Smart Tomcat 插件简化项目创建四、创建项目时可能遇到的几个问题。 一、什么是 Servlet Servlet 是一种实现 动态页面…...
X年后,ChatGPT会替代底层程序员吗?
能不能替代,真的很难说,因为机器换掉人,这其实是一个伦理问题。 其实说白了,任何行业在未来都会被AI或多或少的冲击到,因为ChatGPT做为一个可以持续提升智能的AI,在某些方面的智能程度超过人类并不是什么难…...
OpenAI 推出新网络爬虫GPTBot,为GPT-5做准备
目录 一、GPTBot是什么?它是如何工作的?二、GPTBot 与 Google Bot 等搜索引擎网络爬虫有何不同?三、GPTBot 与 Perplexity AI 的网络爬虫有何不同?四、允许 GPTBot 爬取有哪些风险和好处?4.1 允许 GPTBot 的好处4.2 允…...
【Easy云盘 | 第二篇】后端统一设计思想
文章目录 4.1后端统一设计思想4.1.1后端统一返回格式对象4.1.2后端统一响应状态码4.1.3后端统一异常处理类4.1.4StringUtils类4.1.5 RedisUtils类 4.1后端统一设计思想 4.1.1后端统一返回格式对象 com.easypan.entity.vo.ResponseVO Data public class ResponseVO<T> …...
c语言:模拟字符串拷贝功能(strcpy),面试题
面试题:优化中的优化(10分满分) 字符串拷贝:是将一个字符串的内容复制到另一个字符串中的操作。 运用函数模拟字符串拷贝:(5分) 模拟字符串拷贝 #include <stdio.h> void my_strcpy(char* dest, c…...
信创环境ES索引管理脚本:close, delete
背景 elastic-curator在信创环境无现成安装包,且现成一般无法联网,此时通过脚本管理es索引是最佳选择。 1, 脚本内容: es-close-del.sh [rootmyprojtest001 ]# cat es-close-del.sh #/bin/bash#elastic地址 ELASTIC_URL127.0.0.1:9200 #默认的删除时间…...
torch-v1.3.1-build
编译pytorch-v1.3.1 python版本>3.8会收到报错 error: cannot convert ‘std::nullptr_t’ to ‘Py_ssize_t’ {aka ‘long int’} in initialization, 参见: https://github.com/pytorch/pytorch/issues/28060 简单办法是用python3.7 wget https://mirrors.tuna.tsingh…...
C语言宏定义笔记
把宏名全部大写,函数名不要全部大写。注意宏定义表示数据类型和用 typedef 定义数据说明符的区别。宏定义只是简单的字符串替换,由预处理器来处理; typedef 是在编译阶段由编译器处理的,它并不是简单的字符串替换,而给…...
设计模式:生活中的观察者模式
想象你在社交媒体上关注(订阅)了一个名人或新闻频道(主题)。一旦他们发布新内容,所有关注者(观察者)都会收到通知。这个过程就很像观察者模式的工作原理。 生活场景类比 主题(Subj…...
Qt实现Kermit协议(四)
3 实现 3.3 KermitRecvFile 该模块实现了Kermit接收文件功能。 序列图如下: 3.3.1 KermitRecvFile定义 class QSerialPort; class KermitRecvFile : public QObject, public Kermit {Q_OBJECT public:explicit KermitRecvFile(QSerialPort *serial, QObject *…...
苏州金龙助力旅游客运加速蜕变
近日,北京铭悦旅游客运有限公司又迎来一批苏州金龙海格纯电动客车。(以下简称北京铭悦旅游)总经理郭保生在车辆交付时说到,“为迎接强劲复苏的旅游市场,要求旅游客运向绿色客运转型,以及人民对品质生活、美…...
从脚本运维到AI自治运维,全链路可观测性重构,SITS 2026标准下9类典型故障自动根因定位率突破91.7%
更多请点击: https://intelliparadigm.com 第一章:AI原生DevOps:SITS 2026开发运维一体化新范式 AI原生DevOps并非传统CI/CD管道的简单增强,而是以大模型驱动的智能体(Agent)为核心,重构软件交…...
【信息科学与工程学】【人工智能】【数字孪生】【游戏科学】主要数学模型-第九篇 计算神经科学
认知神经科学的几何、拓扑与计算建模框架 这是一个深度交叉领域的问题,我将从几何表示、拓扑结构、动力学模型和仿真算法四个维度,系统梳理从神经元到全脑的计算神经科学建模方法。 一、神经元与连接的几何表示模型 神经元形态的表示: a) 线表示:将神经元的树突和轴突表示…...
Java 判断选择循环
一、判断1.应用场景:只有满足条件,对应的代码才能执行2.三种形式:3.示例:4.注意事项:二、选择1.使用:把所有的选择一一列举出来,根据不同的条件任选其一2.格式:3.示例:4.…...
下载 | Win11 官方精简版,系统占用空间极少!(4月末更新、Win11 IoT物联网 LTSC版、适合老电脑安装使用)
⏩ 【资源A023】Win11 LTSC 2024 ISO系统映像 🔶Win11 物联网IoT LTSC版,默认无TPM等硬件限制,更方便老电脑安装使用。LTSC是长期服务渠道版本,网友俗称“老坛酸菜版”,相当于微软官方的精简版Win11,精简了…...
微服务核心框架设计:从Bumblecore看高可用架构与工程实践
1. 项目概述:从“Bumblecore”看现代微服务架构的演进与核心实践最近在梳理团队的技术资产时,我重新审视了一个内部代号为“Bumblecore”的微服务核心框架。这个项目并非一个开源明星,但在我们过去几年的业务高速迭代中,它扮演了至…...
动态紧凑模型在电子热设计中的高效应用
1. 动态紧凑模型在电子热设计中的核心价值在电子设备日益小型化、高功率化的今天,热管理已成为决定产品可靠性的关键因素。传统热仿真方法面临两大痛点:一是计算资源消耗大,特别是处理复杂封装结构时;二是难以准确预测半导体器件的…...
告别明文传输:手把手教你为open62541 OPC UA服务器配置OpenSSL加密(附证书生成避坑指南)
工业物联网安全实战:基于open62541与OpenSSL构建OPC UA加密通信体系 在工业控制系统与物联网设备的数据交互中,明文传输就像在公共场所用明信片传递商业机密。想象一下工厂里的PLC控制器将生产参数以原始文本形式发送到SCADA系统,或者智能传感…...
为什么顶尖AI产品团队正秘密重构设计系统?——AI原生用户体验的4层认知断层与SITS 2026破局公式
更多请点击: https://intelliparadigm.com 第一章:AI原生用户体验设计:SITS 2026交互设计新趋势 AI原生体验不再将模型能力“封装后隐藏”,而是让智能成为界面的第一公民——用户在输入框中键入自然语言时,系统实时推…...
AI工具搭建自动化视频生成输出审核
# AI工具搭建视频生成中的数据脱敏:一个Python开发者的实战笔记 做视频自动生成这件事,碰到的第一个坎往往不是技术选型,而是数据安全。特别是当视频里要展示真实用户数据的时候,总不能把用户的姓名、手机号、住址这些敏感信息直接…...
流式深度强化学习突破“流式壁垒”:“意图更新”算法性能比肩SAC,计算量仅1/140
一脚油门,开出了多大的坑传统梯度学习的步长规定参数每次移动多大,但对函数输出改变多少缺乏控制。就像驾车学习停车入库,教练规定每次「踩油门0.1秒」,但不同路况下车子前进距离差异大,有时差一厘米入库,有…...
