TypedArray i JavaScript
Denne artikkelen forklarer TypedArray
i JavaScript.
Vi vil forklare i detalj det grunnleggende konseptet med TypedArray
, hver type, hvordan de brukes, og spesifikke bruksområder.
YouTube Video
TypedArray i JavaScript
TypedArray
i JavaScript er et objekt for effektiv håndtering av buffret binærdata. TypedArray
tildeler og manipulerer minne basert på spesifikke datatyper. I motsetning til vanlige array kan TypedArray
kun inneholde fast størrelse binærdata, ikke vilkårlige datatyper.
Den grunnleggende strukturen til TypedArray
Hovedkomponentene i en TypedArray
er ArrayBuffer
og selve TypedArray
.
- ArrayBuffer: En buffer med fast størrelse som tildeler binærdata i minnet. Denne bufferen er kun et dataområde og kan ikke leses fra eller skrives til direkte.
- TypedArray: Et innpakningsobjekt som anvender en spesifikk datatype til bufferen for å muliggjøre dataadgang og -manipulering.
Grunnleggende brukseksempel
Følgende er et eksempel på å opprette en ArrayBuffer
og deretter opprette en TypedArray
basert 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 eksempelet opprettes en
ArrayBuffer
, og deretter lages enUint8Array
basert på denne bufferen. Hvert element behandles som et 8-bits usignert heltall, og lagrer verdier kun innenfor det spesifiserte området.
Typer av TypedArray
Det finnes forskjellige typer TypedArray
for hver datatype. De viktigste er som følger.
Type Navn | Størrelse på Element | Beskrivelse |
---|---|---|
Int8Array |
1 byte | 8-bits signert heltall |
Uint8Array |
1 byte | 8-bits usignert heltall |
Uint8ClampedArray |
1 byte | 8-bits usignert heltall (holder fastklemte verdier) |
Int16Array |
2 bytes | 16-bits signert heltall |
Uint16Array |
2 bytes | 16-bits usignert heltall |
Int32Array |
4 bytes | 32-bits signert heltall |
Uint32Array |
4 bytes | 32-bits usignert heltall |
Float32Array |
4 bytes | 32-bits flyttall |
Float64Array |
8 bytes | 64-bits flyttall |
Disse TypedArray
-ene er alle minneeffektive og er effektive for å håndtere store mengder data.
Manipulering av TypedArrays
Du kan få tilgang til data i en TypedArray
ved hjelp av indekser, akkurat som i en vanlig array, men flere spesielle metoder tilbys også.
Angi verdier
I en TypedArray
kan du tildele flere verdier samtidig ved å bruke 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 koden bruker
set
-metoden til å tildele flere verdier samtidig til enInt16Array
, og viser hvert element i konsollen.
Hente en underarray
For å få en del av en TypedArray
som en underarray, bruk subarray
-metoden. Dette refererer til den samme bufferen 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 koden henter et angitt område av elementer fra en
Int16Array
ved å brukesubarray
-metoden og viser subarrayen i konsollen.
Kopiering av buffere
Bufferen til en TypedArray
kan også kopieres til en annen TypedArray
. Ved å bruke set
-metoden kan du kopiere fra en spesifisert posisjon.
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 koden kopierer innholdet av en
Uint8Array
til en annen tabell ved å brukeset
-metoden, og viser den kopierte tabellen i konsollen.
Bruke DataView
Mens en TypedArray
håndterer buffere med en fast datatype, er DataView
et grensesnitt som tillater fleksibel manipulering av binære data med vilkårlige forskyvninger og datatyper. Dette tillater at forskjellige typer kan blandes i den samme bufferen.
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 koden bruker en
DataView
til å skrive ulike typer data—32-bits heltall og 32-bits flyttall—til den samme bufferen og sjekker resultatene. -
DataView
tilbyr større fleksibilitet i dataadgang ennTypedArray
og er spesielt nyttig når du arbeider med binære filformater eller nettverksprotokoller.
Bruksområder for TypedArray
TypedArray
brukes hovedsakelig for effektiv håndtering av store mengder binære data. Spesifikke bruksområder inkluderer følgende.
Bildebehandling
TypedArray
brukes når man manipulerer pikselinformasjon i bildedata. Ved å bruke Uint8Array
lagres RGBA-verdiene for hver piksel, og bildebehandling og redigering utføres.
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 koden lager bildedata med bredde 100 og høyde 100 i RGBA-format ved å bruke en
Uint8Array
, og setter alle piksler til rødt.
Samhandling med WebAssembly
TypedArray
brukes til å utveksle binærdata mellom JavaScript og WebAssembly. Ved å dele minneområdet til JavaScript og WebAssembly gjennom ArrayBuffer
, er rask datautveksling mulig.
Behandling av lyd- og videodata
TypedArray
spiller en viktig rolle i behandling av lyd og video. Du kan lagre lyddataens bølgeformer i Float32Array
for å utføre avspilling og behandling.
Konklusjon
TypedArray
er et kraftig verktøy for effektiv håndtering av store mengder binærdata. Det er spesielt nyttig i ytelseskritiske applikasjoner som bildebehandling, WebAssembly og behandling av lyd-/videodata. TypedArray
har et API som ligner på vanlige arrays, men det finnes begrensninger når det gjelder minnebruk og datatyper, så korrekt differensiering i bruk er påkrevd.
Du kan følge med på artikkelen ovenfor ved å bruke Visual Studio Code på vår YouTube-kanal. Vennligst sjekk ut YouTube-kanalen.