TypedArray i JavaScript
Denne artikel forklarer TypedArray
i JavaScript.
Vi vil forklare i detaljer det grundlæggende koncept for TypedArray
, hver type, hvordan de bruges, og specifikke anvendelsestilfælde.
YouTube Video
TypedArray i JavaScript
TypedArray
i JavaScript er et objekt til effektiv håndtering af bufferet binære data. TypedArray
allokerer og manipulerer hukommelse baseret på specifikke datatyper. I modsætning til almindelige arrays kan TypedArray
kun indeholde binære data af fast størrelse, ikke vilkårlige datatyper.
Den grundlæggende struktur af TypedArray
De vigtigste komponenter i en TypedArray
er ArrayBuffer
og selve TypedArray
.
- ArrayBuffer: En buffer af fast størrelse, der allokerer binære data i hukommelsen. Denne buffer er blot et dataområde og kan ikke læses fra eller skrives til direkte.
- TypedArray: Et wrapper-objekt, som anvender en specifik datatypé på bufferen, hvilket muliggør adgang og manipulation af data.
Grundlæggende brugs-eksempel
Følgende er et eksempel på, hvordan man opretter en ArrayBuffer
og derefter opretter en TypedArray
baseret på den.
1// Create a 16-byte buffer
2const buffer = new ArrayBuffer(16);
3
4// Create a TypedArray (Uint8Array) to handle 8-bit unsigned integers
5const uint8Array = new Uint8Array(buffer);
6
7// Set data
8uint8Array[0] = 255;
9uint8Array[1] = 128;
10
11// Retrieve data
12console.log(uint8Array[0]); // 255
13console.log(uint8Array[1]); // 128
- I dette eksempel oprettes en
ArrayBuffer
, og derefter oprettes enUint8Array
baseret på denne buffer. Hvert element behandles som et 8-bit usigneret heltal, som kun gemmer værdier inden for det angivne område.
Typer af TypedArray
Der er forskellige typer TypedArray
for hver datatypé. De vigtigste er som følger.
Typenavn | Elementstørrelse | Beskrivelse |
---|---|---|
Int8Array |
1 byte | 8-bit fortegnet heltal |
Uint8Array |
1 byte | 8-bit ufortegnet heltal |
Uint8ClampedArray |
1 byte | 8-bit ufortegnet heltal (holder beskårne værdier) |
Int16Array |
2 byte | 16-bit fortegnet heltal |
Uint16Array |
2 byte | 16-bit ufortegnet heltal |
Int32Array |
4 byte | 32-bit fortegnet heltal |
Uint32Array |
4 byte | 32-bit ufortegnet heltal |
Float32Array |
4 byte | 32-bit flydende kommatalsværdi |
Float64Array |
8 byte | 64-bit flydende kommatalsværdi |
Disse TypedArray
s er alle hukommelseseffektive og velegnede til håndtering af store datamængder.
Manipulation af TypedArrays
Du kan få adgang til data i en TypedArray
ved hjælp af indekser, ligesom i en almindelig array, men flere specielle metoder tilbydes også.
Indstilling af værdier
I en TypedArray
kan du tildele flere værdier på én gang ved hjælp af set
-metoden.
1const buffer = new ArrayBuffer(8);
2const int16Array = new Int16Array(buffer);
3
4// Set values
5int16Array.set([10, 20, 30]);
6
7console.log(int16Array[0]); // 10
8console.log(int16Array[1]); // 20
9console.log(int16Array[2]); // 30
- Denne kode bruger
set
-metoden til at tildele flere værdier på én gang til enInt16Array
og viser hvert element i konsollen.
Få en delarray
For at få en del af en TypedArray
som en delarray skal du bruge subarray
-metoden. Dette refererer til den samme buffer som den originale TypedArray
.
1const int16Array = new Int16Array([1, 2, 3, 4, 5]);
2
3// Get a subarray containing elements from the 2nd to the 4th
4const subArray = int16Array.subarray(1, 4);
5
6console.log(subArray); // Int16Array [2, 3, 4]
- Denne kode henter et bestemt interval af elementer fra en
Int16Array
ved hjælp afsubarray
-metoden og viser del-arrayet i konsollen.
Kopiere buffere
Bufferen i en TypedArray
kan også kopieres til en anden TypedArray
. Ved hjælp af set
-metoden kan du kopiere fra en specificeret position.
1const srcArray = new Uint8Array([10, 20, 30, 40]);
2const destArray = new Uint8Array(4);
3
4// Copy
5destArray.set(srcArray);
6
7console.log(destArray); // Uint8Array [10, 20, 30, 40]
- Denne kode kopierer indholdet af en
Uint8Array
til et andet array ved hjælp afset
-metoden og viser det kopierede array i konsollen.
Brug af DataView
Mens en TypedArray
håndterer buffere med en fast datatype, er DataView
en grænseflade, der gør det muligt at manipulere fleksibelt med binære data med vilkårlige forskydninger og datatyper. Dette gør det muligt at blande forskellige typer i den samme buffer.
1const buffer = new ArrayBuffer(8);
2const dataView = new DataView(buffer);
3
4// Write a 32-bit signed integer at offset 0
5dataView.setInt32(0, 12345);
6
7// Write a 32-bit floating-point number at offset 4
8dataView.setFloat32(4, 12.34);
9
10console.log(dataView.getInt32(0)); // 12345
11console.log(dataView.getFloat32(4)); // 12.34000015258789
-
Denne kode bruger en
DataView
til at skrive forskellige datatyper—32-bit heltal og 32-bit kommatal—til den samme buffer og tjekker resultaterne. -
DataView
tilbyder større fleksibilitet for dataadgang endTypedArray
og er især nyttigt ved arbejde med binære filformater eller netværksprotokoller.
Brugsanvendelser af TypedArray
TypedArray
bruges primært til effektiv håndtering af store mængder binære data. Specifikke brugsanvendelser inkluderer følgende.
Billedbehandling
TypedArray
bruges ved manipulation af pixelinformation for billeddata. Ved hjælp af Uint8Array
kan du holde RGBA-værdierne for hver pixel og udføre billedredigering og -behandling.
1const width = 100;
2const height = 100;
3const imageData = new Uint8Array(width * height * 4); // RGBA
4
5// Set pixel data
6for (let i = 0; i < imageData.length; i += 4) {
7 imageData[i] = 255; // Red
8 imageData[i + 1] = 0; // Green
9 imageData[i + 2] = 0; // Blue
10 imageData[i + 3] = 255; // Alpha
11}
- Denne kode opretter billeddata med en bredde på 100 og højde på 100 i RGBA-format ved hjælp af en
Uint8Array
og sætter alle pixels til rød.
Interfacing med WebAssembly
TypedArray
bruges til at udveksle binære data mellem JavaScript og WebAssembly. Ved at dele hukommelsesområdet for JavaScript og WebAssembly via ArrayBuffer
er hurtig dataudveksling mulig.
Bearbejdning af lyd- og videodata
TypedArray
spiller en vigtig rolle i behandlingen af lyd og video. Du kan gemme lyddata-bølgeformer i Float32Array
for at udføre afspilning og behandling.
Konklusion
TypedArray
er et kraftfuldt værktøj til effektiv håndtering af store mængder binære data. Det er særligt nyttigt i præstationskritiske applikationer som billedbehandling, WebAssembly og behandling af lyd-/videodata. TypedArray
har en API, der ligner almindelige arrays, men der er begrænsninger i forhold til hukommelsesbrug og datatyper, så korrekt differentiering i brug er nødvendig.
Du kan følge med i ovenstående artikel ved hjælp af Visual Studio Code på vores YouTube-kanal. Husk også at tjekke YouTube-kanalen.