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 enUint8Arraybaseret 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 TypedArrays 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 enInt16Arrayog 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
Int16Arrayved 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
Uint8Arraytil 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
DataViewtil at skrive forskellige datatyper—32-bit heltal og 32-bit kommatal—til den samme buffer og tjekker resultaterne. -
DataViewtilbyder større fleksibilitet for dataadgang endTypedArrayog 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
Uint8Arrayog 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.