了解TypedArray:如何更高效地处理二进制数据

一、TypedArray是什么

TypedArray是JavaScript中一系列与ArrayBuffer相关的类型化数组构造函数的集合,支持对二进制数据进行高效处理。主要包括以下几种类型:

  • Int8Array、Uint8Array、Uint8ClampedArray
  • Int16Array、Uint16Array
  • Int32Array、Uint32Array
  • Float32Array、Float64Array

这些构造函数的目的是为了提供快速、可预测的操作二进制数据的方式。与普通的JavaScript数组相比,TypedArray数组是在底层表示和存储上更加接近底层二进制数据。因此,在数量庞大的数据处理中,使用TypedArray可以获得更高的性能和更少的内存开销。

二、与ArrayBuffer的关系

TypedArray是一系列与ArrayBuffer相关的类型化数组构造函数的集合。因此使用TypedArray最好的方式是先了解一下ArrayBuffer。

ArrayBuffer是一个通用的二进制数据容器,用于存储二进制数据。它可以与TypedArray一起使用,作为数据输入和输出的中介。创建一个ArrayBuffer的方法为:

let buffer = new ArrayBuffer(16);

上面的代码创建了一个长度为16个字节的ArrayBuffer。可以通过下标对这个ArrayBuffer进行访问:

let buffer = new ArrayBuffer(16);
let intArray = new Int32Array(buffer);   // 构造一个Int32Array

intArray[0] = 10;
console.log(buffer);    // ArrayBuffer { byteLength: 16 }

上述代码将ArrayBuffer作为Int32Array的构造函数的参数进行传递,并将Int32Array的第一个元素设置为10。最后输出的buffer的字节长度为16。

三、TypedArray中的各种类型

1. Int8Array、Uint8Array、Uint8ClampedArray

这三种类型都是用来处理8位二进制数据的。

  • Int8Array:用于处理8位有符号整数,在-128到127之间。
  • Uint8Array:用于处理8位无符号整数,在0到255之间。
  • Uint8ClampedArray:使用Uint8ClampedArray会强制将不在0到255之间的值截断,因此适合处理图像数据等需要精确控制的二进制数据。

以下是三种类型的创建方式:

let int8Array = new Int8Array(8);
let uint8Array1 = new Uint8Array(8);
let uint8Array2 = new Uint8ClampedArray(8);

上述代码分别创建了一个长度为8的Int8Array、Uint8Array和Uint8ClampedArray。

2. Int16Array、Uint16Array

这两种类型都是用来处理16位二进制数据的。

  • Int16Array:用于处理16位有符号整数。
  • Uint16Array:用于处理16位无符号整数。

以下是两种类型的创建方式:

let int16Array = new Int16Array(8);
let uint16Array = new Uint16Array(8);

上述代码分别创建了一个长度为8的Int16Array和Uint16Array。

3. Int32Array、Uint32Array

这两种类型都是用来处理32位二进制数据的。

  • Int32Array:用于处理32位有符号整数。
  • Uint32Array:用于处理32位无符号整数。

以下是两种类型的创建方式:

let int32Array = new Int32Array(8);
let uint32Array = new Uint32Array(8);

上述代码分别创建了一个长度为8的Int32Array和Uint32Array。

4. Float32Array、Float64Array

这两种类型都是用来处理浮点型二进制数据的。

  • Float32Array:用于处理32位浮点数字。
  • Float64Array:用于处理64位浮点数字。

以下是两种类型的创建方式:

let float32Array = new Float32Array(8);
let float64Array = new Float64Array(8);

上述代码分别创建了一个长度为8的Float32Array和Float64Array。

四、TypedArray的基本操作

1. TypedArray的创建

TypedArray可以使用以下方式进行创建:

let array = new TypedArray(length);
let array = new TypedArray(buffer);
let array = new TypedArray(buffer, byteOffset, length);
let subarray = new TypedArray(sourceArray);
let subarray = new TypedArray(sourceArray, begin);
let subarray = new TypedArray(sourceArray, begin, end);

以上代码分别为不同的创建方式:

  • 使用长度创建一个新的TypedArray
  • 使用一个已有的ArrayBuffer创建一个新的TypedArray
  • 使用一个已有的ArrayBuffer创建指定范围的TypedArray
  • 从一个数组中创建一个子数组
  • 从一个数组中创建指定范围的子数组

2. TypedArray的读取和设置

TypedArray的读取和设置方式与普通的JavaScript数组相同:

let array = new Int32Array(8);
array[0] = 123;
let value = array[0];
console.log(value);    // 123

3. TypedArray的迭代

TypedArray的迭代方式有两种,一种是通过for循环逐一迭代,另一种是使用TypedArray内置的forEach()方法进行迭代。

for循环的迭代方式如下:

let array = new Int32Array(8);
for(let i=0; i<array.length; i++) {
  console.log(array[i]);
}

TypedArray的forEach()方法可以像普通的数组一样使用:

let array = new Int32Array(8);
array.forEach(function(element) {
  console.log(element);
});

4. TypedArray的切割

与普通的JavaScript数组一样,TypedArray也支持数组的切割操作。该操作返回一个新的TypedArray。

let array = new Int32Array([1, 2, 3, 4, 5, 6, 7, 8]);
let slice = array.slice(2, 6);
console.log(slice);    // Int32Array [ 3, 4, 5, 6 ]

5. TypedArray的复制和拷贝

TypedArray也支持复制和拷贝操作。复制操作是直接赋值一个TypedArray,拷贝操作是创建一个新的TypedArray,并将旧的TypedArray中的数据拷贝到新的TypedArray中。

以下是TypedArray的复制和拷贝代码示例:

let array1 = new Int32Array(8);
let array2 = array1;    // 复制
let array3 = new Int32Array(8);
array3.set(array1);     // 拷贝

五、应用方面

TypedArray在许多应用中得到了广泛的应用。以下是一些示例。

1. 图像处理

Web应用中的图像处理通常需要解码和处理大量的二进制图片数据。使用TypedArray可以快速、高效地处理二进制图像数据,以便进行图像处理、增强和压缩等操作。

2. 网络通信

在Web应用中,客户端与服务端之间通常需要进行大量的网络通信。使用TypedArray可以帮助实现高效、可靠的网络通信并提高数据处理的速度。

3. 流媒体数据

流媒体数据通常是大量的数据流,使用TypedArray可以快速处理、解码和压缩这些数据,以便在Web应用中实现高质量的媒体体验。

六、总结

TypedArray是JavaScript中一个强大的二进制数据处理工具,它提供了以底层二进制数据为中心的高效、可预测的数据处理方式。在Web应用的许多方面,TypedArray都有大量的应用,如图像处理、网络通信和流媒体数据等。学习使用TypedArray可以使我们更有效地处理大量的二进制数据,提高Web应用的性能和用户体验。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/181962.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-24 06:16
下一篇 2024-11-24 06:17

相关推荐

  • Trocket:打造高效可靠的远程控制工具

    如何使用trocket打造高效可靠的远程控制工具?本文将从以下几个方面进行详细的阐述。 一、安装和使用trocket trocket是一个基于Python实现的远程控制工具,使用时…

    编程 2025-04-28
  • Python生成列表最高效的方法

    本文主要介绍在Python中生成列表最高效的方法,涉及到列表生成式、range函数、map函数以及ITertools模块等多种方法。 一、列表生成式 列表生成式是Python中最常…

    编程 2025-04-28
  • TFN MR56:高效可靠的网络环境管理工具

    本文将从多个方面深入阐述TFN MR56的作用、特点、使用方法以及优点,为读者全面介绍这一高效可靠的网络环境管理工具。 一、简介 TFN MR56是一款多功能的网络环境管理工具,可…

    编程 2025-04-27
  • 用Pythonic的方式编写高效代码

    Pythonic是一种编程哲学,它强调Python编程风格的简单、清晰、优雅和明确。Python应该描述为一种语言而不是一种编程语言。Pythonic的编程方式不仅可以使我们在编码…

    编程 2025-04-27
  • Python生成10万条数据的高效方法

    本文将从以下几个方面探讨如何高效地生成Python中的10万条数据: 一、使用Python内置函数生成数据 Python提供了许多内置函数可以用来生成数据,例如range()函数可…

    编程 2025-04-27
  • Gino FastAPI实现高效低耗ORM

    本文将从以下多个方面详细阐述Gino FastAPI的优点与使用,展现其实现高效低耗ORM的能力。 一、快速入门 首先,我们需要在项目中安装Gino FastAPI: pip in…

    编程 2025-04-27
  • 如何利用字节跳动推广渠道高效推广产品

    对于企业或者个人而言,推广产品或者服务是必须的。如何让更多的人知道、认识、使用你的产品是推广的核心问题。而今天,我们要为大家介绍的是如何利用字节跳动推广渠道高效推广产品。 一、个性…

    编程 2025-04-27
  • 如何制作高效的目标识别数据集

    对于机器学习中的目标识别任务来说,制作高质量的数据集对于训练模型十分重要。本文将从数据收集、数据标注、数据增强等方面阐述如何制作高效的目标识别数据集。 一、数据收集 在制作目标识别…

    编程 2025-04-27
  • 用mdjs打造高效可复用的Web组件

    本文介绍了一个全能的编程开发工程师如何使用mdjs来打造高效可复用的Web组件。我们将会从多个方面对mdjs做详细的阐述,让您轻松学习并掌握mdjs的使用。 一、mdjs简介 md…

    编程 2025-04-27
  • 如何设计一个高效的中台产品

    本文介绍中台产品的设计思路,并从用户、技术和可维护性等多个方面进行详细阐述。 一、用户体验至上 中台产品的首要目标是满足用户需求和提升用户体验。因此,中台产品的设计应该以用户为中心…

    编程 2025-04-27

发表回复

登录后才能评论