suchen
HeimWeb-FrontendHTML-Tutorial对类型化数组(Typed Array)与ArrayBuffer的理解_html/css_WEB-ITnose

是类型化数组(Typed Array)也是HTML5中新引入的API。用一句话解释类型化数组就是:它是JS操作二进制数据的接口。 众所周知,直接操作二进制数据可以使程序更为高效, 尽管JS对常规数组做了很多优化(JS数组被实现为对象形式),但是不得不承认JS数组的效率一直不高。比如在WebGL中的图像数据传输, 如果使用原生的JS数组, 浏览器在与显卡通信时,必须将它转换为二进制形式,这一步较为耗时。正是因为有大量二进制数据的操作需求,所以ArrayBuffer应运而生。在Canvas(可参考本人canvas笔记canvas的基本原理)中,使用 getImageDate()方法所返回的 ImageData对象就是一个类数组对象,HTML标准中称其为 CanvasPixelArray,它除了在值的处理方式上与 ArrayBuffer中视图类型 Unit8Array有点区别外,其他都一样( Unit8Array只能处理0-255的数字,而 CanvasPixelArray可以处理更多)

对于刚接触类型化数组的概念看到这可能还是云里雾里,下面将逐一将我所理解的ArrayBuffer中的关键概念做个整理:

视图(View)

大多数资料中对于视图都是一句带过,比如这篇博客中( ArrayBuffer:类型化数组)对于视图的解释就是:

ArrayBuffer作为内存区域,可以存放多种类型的数据。不同数据有不同的存储方式,这就叫做“视图”。

当我刚看到上面的解释,还是无法体会“视图”的含义,暂且把ArrayBuffer的概念放一边, 想象一下,既然是操作二进制数据的接口,那么该如何操作他们呢, 比如8位二进制数1是 00000001,我们肯定不会使用原始的二进制编程,那么当我们操作这个 1时,肯定是以 1的形式操作, 那么这里的 1就是视图(view)了, 视图可以理解为方便理解的二进制数据。如果知道C语言,对于这个概念就不难把握了,比如C语言中的字符串实际是数字,那么这里的字符串也可以理解为“视图”。其实这里的视图就是类型化数组。

ArrayBuffer的概念

ArrayBuffer是一段不透明的内存区域(所谓不透明,就是无法直接操作的数据块),单位是字节(Byte)也就是8位,它的 byteLength属性返回其内存大小。在JS中,通过构造函数的形式申明一段ArrayBuffer区域:

var a = new ArrayBuffer(10)a.byteLength // =>10

在这段内存区域上,可以使用不同的视图来创建任意数量的类型化数组, 这些类型化数组也可以是重叠的。有八种不同的类型化数组(视图),分别为:

  • Int8Array:8位有符号整数,长度1个字节。

  • Uint8Array:8位无符号整数,长度1个字节。

  • Int16Array:16位有符号整数,长度2个字节。

  • Uint16Array:16位无符号整数,长度2个字节。

  • Int32Array:32位有符号整数,长度4个字节。

  • Uint32Array:32位无符号整数,长度4个字节。

  • Float32Array:32位浮点数,长度4个字节。

  • Float64Array:64位浮点数,长度8个字节。

这里引用这篇博客中( JavaScript中的ArrayBuffer详细介绍)的例子来解释ArrayBuffer区域中出现的重叠现象:

var buffer = new ArrayBuffer(12)var x = new Float32Array(buffer, 0, 2)var y = new Float32Array(buffer, 4, 1)x[1] = 7;console.log(y[0]); // 7

原文中作者的解释过于简单。这里的 y[0]之所以为7,是因为在 buffer这段12个字节的内存区域中,申明来一个从0字节开始,长度为2的32位浮点数 x(也就是说x占了前8个字节),再申明一个从第 4个字节开始,长度为1的32位浮点数 y,那么这里的 y与 x实际上就是重叠的, x已经占了8个字节,而 y是从第4个字节开始的。既然是重叠的,那么改变 x势必会影响到 y,这里 x类型化数组的第一个元素赋值为7,那么在ArrayBuffer中即是 00000000 00000000 00000000 00000111而 y是从第四个字节开始,也就是从 00000111开始, 所以 y也是 00000111也就是7了。

类型化数组与常规数组的区别

类型化数组实质上是二进制数据,而ArrayBuffer这段区域又是指定长度的,基于这些便可推出其与常规数组的区别:

  • 类型化数组元素都是数字,它不像JS常规数组那样可以参杂不同类型,比如下面例子:chestnut:中的赋值就是无效的

  • 类型化数组长度固定

  • 所有元素初始化为0

var  a = new Int8Array(3)a[0] = 'hello'a[0] // =>0 显示a[0]依然未定义a[0] = '8'a[0]  // = > 8 但是注意类型的自动转换,当可被转换成数字时,JS会自动将其转成数值

DataView

既然本质是在操作二进制数据,那么就涉及到“高位优先”还是“低位优先”的数据传输问题……

今天太晚啦,明天接着码,未完待续~

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
HTML: Ist es eine Programmiersprache oder etwas anderes?HTML: Ist es eine Programmiersprache oder etwas anderes?Apr 15, 2025 am 12:13 AM

HtmlisnotaprogrammingLanguage; itiSamarkuplanguage.1) htmlstructuresandFormatswebcontentuses.2) itWorkswithCSSForstylingandjavaScriptForinteraktivität, EnhancingWebDevelopment.

HTML: Erstellen der Struktur von WebseitenHTML: Erstellen der Struktur von WebseitenApr 14, 2025 am 12:14 AM

HTML ist der Eckpfeiler der Erstellung von Webseitenstruktur. 1. HTML definiert die Inhaltsstruktur und die Semantik und Verwendung usw. Tags. 2. Stellen Sie semantische Marker wie usw. zur Verfügung, um den SEO -Effekt zu verbessern. 3. Um die Benutzerinteraktion durch Tags zu verwirklichen, achten Sie auf die Verifizierung der Form. 4. Verwenden Sie fortschrittliche Elemente wie in Kombination mit JavaScript, um dynamische Effekte zu erzielen. 5. Zu den häufigen Fehlern gehören nicht abgegebene Bezeichnungen und nicht geeignete Attributwerte, und Überprüfungstools sind erforderlich. 6. Optimierungsstrategien umfassen das Reduzieren von HTTP -Anforderungen, die Komprimierung von HTML, die Verwendung semantischer Tags usw.

Von Text zu Websites: Die Kraft von HTMLVon Text zu Websites: Die Kraft von HTMLApr 13, 2025 am 12:07 AM

HTML ist eine Sprache, mit der Webseiten erstellt, die Webseitenstruktur und -inhalt über Tags und Attribute definiert werden. 1) HTML organisiert die Dokumentstruktur über Tags, wie z. B.. 2) Der Browser analysiert HTML, um das DOM zu erstellen und die Webseite zu rendern. 3) Neue Merkmale von HTML5, wie z. B. Multimedia -Funktionen. 4) Zu den häufigen Fehlern gehören nicht abgestimmte Bezeichnungen und nicht geeignete Attributwerte. 5) Die Optimierungsvorschläge umfassen die Verwendung semantischer Tags und die Reduzierung der Dateigröße.

HTML, CSS und JavaScript verstehen: Ein AnfängerhandbuchHTML, CSS und JavaScript verstehen: Ein AnfängerhandbuchApr 12, 2025 am 12:02 AM

WebdevelopmentRelieSonHtml, CSS und JavaScript: 1) HtmlStructuresContent, 2) CSSstylesit und 3) JavaScriptaddssinteraktivität, Bildung von TheBasisofModerernwebexperiences.

Die Rolle von HTML: Strukturierung von WebinhaltenDie Rolle von HTML: Strukturierung von WebinhaltenApr 11, 2025 am 12:12 AM

Die Rolle von HTML besteht darin, die Struktur und den Inhalt einer Webseite durch Tags und Attribute zu definieren. 1. HTML organisiert Inhalte über Tags wie das Lesen und Verständnis. 2. Verwenden Sie semantische Tags wie usw., um die Zugänglichkeit und SEO zu verbessern. 3. Optimierung des HTML -Codes kann die Ladegeschwindigkeit und die Benutzererfahrung der Webseite verbessern.

HTML und Code: Ein genauerer Blick auf die TerminologieHTML und Code: Ein genauerer Blick auf die TerminologieApr 10, 2025 am 09:28 AM

HtmlisaspecifictypeofcodeFocusedonstructuringuringwebcontent, während "Code" breitincludesluages ​​-ähnlichjavaScriptandpythonforfunctionality.1) htmldefineswebpageStructureStags.2) "Code" cometesaWiNrangeOfLanguagesForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForForfirsInsForfunctionNacts

HTML, CSS und JavaScript: Wesentliche Tools für WebentwicklerHTML, CSS und JavaScript: Wesentliche Tools für WebentwicklerApr 09, 2025 am 12:12 AM

HTML, CSS und JavaScript sind die drei Säulen der Webentwicklung. 1. HTML definiert die Webseitenstruktur und verwendet Tags wie z.

Die Rollen von HTML, CSS und JavaScript: KernverantwortungDie Rollen von HTML, CSS und JavaScript: KernverantwortungApr 08, 2025 pm 07:05 PM

HTML definiert die Webstruktur, CSS ist für Stil und Layout verantwortlich, und JavaScript ergibt eine dynamische Interaktion. Die drei erfüllen ihre Aufgaben in der Webentwicklung und erstellen gemeinsam eine farbenfrohe Website.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

Sicherer Prüfungsbrowser

Sicherer Prüfungsbrowser

Safe Exam Browser ist eine sichere Browserumgebung für die sichere Teilnahme an Online-Prüfungen. Diese Software verwandelt jeden Computer in einen sicheren Arbeitsplatz. Es kontrolliert den Zugriff auf alle Dienstprogramme und verhindert, dass Schüler nicht autorisierte Ressourcen nutzen.

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools