在 JavaScript 中存储字节数组
本文将讨论如何在 JavaScript 中存储字节数组。
JavaScript 中的 ArrayBuffer 对象
字节数组或字节数组在 JavaScript 中称为 ArrayBuffer 对象。 ArrayBuffer 不是从 JavaScript 数组派生的,并且在内存中具有固定长度,无法更改。
此外,您不能像我们在通常的 JavaScript 数组中那样直接访问 ArrayBuffer 对象中的元素。 它需要一个单独的视图对象来读/写。
语法:
new ArrayBuffer(length_in_bytes);
上面的代码将调用 ArrayBuffer 构造函数来创建一个具有指定字节长度的新 ArrayBuffer 实例。
让我们创建一个长度为 8 字节的 ArrayBuuffer。
let myTypedArrayBuffer = new ArrayBuffer(8);
理想情况下,上述代码应创建一个大小为 8 字节的新 ArrayBuffer。 现在,我们将检查创建的 ArrayBuffer 对象 myTypedArrayBuffer 的 byteLength 属性。
代码:
console.log(myTypedArrayBuffer.byteLength);
输出:
正如预期的那样,缓冲区的长度为 8 个字节。 它将在内存中分配 8 个字节,每个字节都被分配为零。
这个缓冲区不提供任何机制来操作它的字节。 因此,我们必须使用类型化数组视图对象来读取/写入 ArrayBuffer。
类型化数组视图
类型化数组视图就像不同的镜头,提供字节数组的解释,特别是存储在内存中的 ArrayBuffer。 这些视图支持数字类型,例如有符号和无符号整数以及浮点数。
已实现以下视图来操作 ArrayBuffer 对象。
类型 | 说明 |
---|---|
Uint8Array | 此视图操作 ArrayBuffer 字节,以便每个字节都是一个单独的整数。 由于一个字节包含8位,因此可以表示255个无符号整数,整数范围是0到255。 |
Uint16Array | 该视图服务于 ArrayBuffer,因为缓冲区中每 2 个字节是一个整数,范围从 0 到 65535。所有整数都是无符号的。 |
Uint32Array | ArrayBuffer 中的每 4 个字节被认为是一个整数。 因此,这个视图可以存储超过 40 亿个无符号数。 |
Float64Array | Float64Array 可以将缓冲区中的每 8 个字节解释为一个整数。 |
如您所见,不同的视图使您能够将 ArrayBuffer 中的二进制数据解释为不同的数字格式。
在 JavaScript 中使用类型化数组视图操作 ArrayBuffer
所有上述类型化数组视图都遵循相同的构造函数模式,如下所示。
new TypedArray(buffer); // provides and ArrayBuffer type object
new TypedArray(array_object); // provides an array-like object
new TypedArray(number_of_elements); // provides the number of integers to be in the typed array
new TypedArray(another_typed_array); // provides and ArrayBuffer type object
new TypedArray();
JavaScript 中没有实际的 TypedArray()
构造函数。 它将是视图构造函数之一,如 new Uint8Array()
、new Float64Array()
。
在前面的示例中,让我们创建一个新的 Uint8Array 视图来操作已经创建的 ArrayBuffer(myTypedArrayBuffer)
。
代码:
let unsigned8BitIntView = new Uint8Array(myTypedArrayBuffer);
console.log(unsigned8BitIntView);
输出:
Uint8Array 类型数组对象已创建,所有字节都填充了值 0。
让我们检查一下这个视图对象的长度和实际字节长度。 两者都应为 8。
代码:
console.log('Length of the view: ' + unsigned8BitIntView.length + '.... Byte length of the view: ' + unsigned8BitIntView.byteLength);
我们已经使用 Uint8Array 视图中的 length 和 byteLength 属性来获取以上两个值。
输出:
让我们向内存缓冲区写入一个值。
unsigned8BitIntView[0] = 200;
现在我们可以通过迭代每个元素来检查 unsigned8BitIntView 对象。
代码:
for(let value of unsigned8BitIntView) {
console.log(value);
}
输出:
200 值已存储在字节数组中。 让我们尝试将 300 写入字节数组。
unsigned8BitIntView[1] = 300;
我们将像上面的例子一样再次迭代字节数组。
输出:
根据输出,整数 300 尚未写入字节数组,因为此视图只能写入 0 到 255 之间的整数。
300 被忽略,而是写成 44。下面显示了整数 44 是如何生成的。
整数 300 的二进制形式可以写成如下形式。
100101100
由于此视图解释 8 位无符号整数,因此将省略第一位,并考虑其余 8 位。
00101100
上面的二进制格式是整数44。同理,我们可以使用所有类型化的数组视图来操作底层的ArrayBuffer或者内存中的字节数组。
相关文章
JavaScript 中的深度复制数组
发布时间:2023/06/05 浏览次数:196 分类:JavaScript
-
在本文中,您将学习深拷贝和浅拷贝的概念。 本文还将介绍在 JavaScript 中对数组执行深拷贝的方法。JavaScript浅拷贝和深拷贝介绍 在 JavaScript 中,可以通过两种方式复制对象。
在 JavaScript 中将毫秒转换为日期
发布时间:2023/06/05 浏览次数:111 分类:JavaScript
-
在本文中,我们将通过示例学习如何使用 JavaScript 的默认日期对象及其方法从毫秒生成日期。
JavaScript Date.getTime() 方法
发布时间:2023/06/05 浏览次数:85 分类:JavaScript
-
在本文中,我们将讨论 Date 类中的 getTime() 方法是什么以及如何在不同的用例中获取时间。 此外,我们还将查看与 getTime() 类似的方法,即 now() 方法以及示例。
在 JavaScript 中获取选中或突出显示的文本
发布时间:2023/06/04 浏览次数:172 分类:JavaScript
-
本文将展示我们如何使用 DOM API 来让用户在屏幕上突出显示或选择文本。 DOM API 为我们提供了 getSelection() 方法,该方法允许我们获取用户选择的文本。
去除 JavaScript 中的空格
发布时间:2023/06/04 浏览次数:195 分类:JavaScript
-
在 JavaScript 中,我们可以借助 trim() 和 replace() 等默认 JavaScript 字符串方法从字符串中删除单个或多个空格。使用 JavaScript 中的 trim() 方法去除空格
在 JavaScript 中清理字符串
发布时间:2023/06/04 浏览次数:129 分类:JavaScript
-
这篇 JavaScript 教程文章解释了在 JavaScript 中清理数据的含义。 此外,它还讨论了可用于清理 JavaScript 中的字符串的不同包。
在 JavaScript 中更改字符串字符
发布时间:2023/06/04 浏览次数:75 分类:JavaScript
-
在本文中,我们将学习如何使用不同的代码示例在 JavaScript 中使用多种方法从给定的字符串值更改特定索引处的特定字符。
在 JavaScript 中构建字符串
发布时间:2023/06/04 浏览次数:60 分类:JavaScript
-
在本文中,我们将通过不同的代码示例学习如何使用连接运算符和一些内置方法(如 JavaScript 中的 join())来生成或构建字符串。
如何在 JavaScript 中压缩字符串
发布时间:2023/06/04 浏览次数:175 分类:JavaScript
-
在 JavaScript 中,可以有范围很广的压缩,比如 gzip 之类的文件压缩等等。 在这里,我们将讨论两种压缩字符串的方法。在 JavaScript 中使用 js-string-compression 压缩字符串