VorwortModernes JavaScript muss sich komplexeren Szenarien stellen und es gibt mehr Arten der Datenübertragung, einschließlich binärer Übertragung. Um die Datenverarbeitung zu erleichtern und die Effizienz zu verbessern, wurde das ArrayBuffer-Objekt erstellt. Bei der Verwendung werden Sie jedoch feststellen, dass es nicht nur ArrayBuffer gibt, sondern auch eine Reihe von Objekten wie TypedArray, DataView, Blob, FileReader usw., was die Leute hinsichtlich der Beziehung zwischen ihnen verwirren kann. Warum gibt es so viele Objekte? Mit diesen Fragen im Hinterkopf habe ich nach Informationen gesucht und versucht, die Zusammenhänge zu klären. Beziehungen zwischen verschiedenen Objekten ArrayBufferArrayBuffer ist das grundlegendste Binärobjekt in JavaScript, das einen kontinuierlichen Speicherplatz in Bytes beschreibt. const Puffer = neuer ArrayBuffer(32); Auf diese Weise haben wir einen 32-Byte-Speicherbereich erstellt und können mit buffer.byteLength seine Länge überprüfen. ArrayBuffer-Objekte können nur sehr wenig und sind nicht editierbar. Wenn Sie Daten bearbeiten müssen, müssen Sie zwei andere Objekte verwenden, TypedArray und Datenansicht. Typisiertes ArrayTypedArray ist ein typisiertes Array. TypedArray selbst speichert keine Daten, sondern wird speziell zum Anzeigen von ArrayBuffer-Daten verwendet. Aus diesem Grund heißt es TypedArray. Es ist nicht der Name eines bestimmten Konstruktors, sondern ein allgemeiner Name für eine Gruppe von Konstruktoren.
Beim Erstellen können Sie Länge, typedArray, ArrayBuffer und Array übergeben. Natürlich können Sie nichts übergeben. const uint1 = neues Uint8Array(8); const uint2 = neues Uint16Array(neues Uint8Array(8)); const uint3 = neues Uint8Array(neuer ArrayBuffer(8)); const uint4 = neues Uint8Array([1, 2, 3]); const uint5 = neues Uint8Array(); Im obigen typedArray wird, mit Ausnahme des bei der Erstellung übergebenen ArrayBuffer, während des neuen Prozesses ein neuer ArrayBuffer auf der untersten Ebene erstellt. Sie können arr.buffer verwenden, um auf den ArrayBuffer zuzugreifen, auf den es verweist. Alle Operationen auf gewöhnlichen Arrays können in TypedArray verwendet werden. Da ArrayBuffer aber einen kontinuierlichen Speicherbereich beschreibt, können wir einen Wert nicht löschen, sondern nur 0 zuweisen. Es gibt keine Möglichkeit, die Concat-Methode zu verwenden. Uint8ClampedArrayUint8ClampedArray ist etwas Spezielles und behandelt positive und negative Überläufe unterschiedlich. Bei anderen Daten außerhalb der Grenzen wird nur der Abschnitt ganz rechts (niedrigstes Bit) beibehalten und die Überlaufdaten werden verworfen. Uint8ClampedArray speichert Daten außerhalb der Grenzen jedoch als 255 und negative Zahlen als 0. Konvertierung zwischen ZeichenTypedArray übergibt Zeichenfolgen nicht direkt, daher müssen sie zuerst transkodiert werden. Zeichenfolge → Unit8Array const string = "Hallo"; Uint8Array.from(string.split(""), (e) => e.charCodeAt(0)); Unit8Array → Zeichenfolge // TextDecoder-Objekt verwenden const u8 = Uint8Array.of(72, 101, 108, 108, 111); neuer TextDecoder().decode(u8); // Konvertieren mit fromCharCode const u8 = Uint8Array.of(72, 101, 108, 108, 111); Array.from(u8, (e) => String.fromCharCode(e)).join(""); DatenansichtMit Ausnahme der uint2-Variable sind alle oben genannten Daten von einem einzigen Datentyp. Das uint2-Objekt speichert zwei Datentypen in einem Speicherabschnitt, der als zusammengesetzte Ansicht bezeichnet wird. Die Datentypen in JavaScript sind oft nicht so einfach und es wäre problematischer, nur mit TypedArray zu arbeiten, daher gibt es ein DataView-Objekt. DataView hat mehr Operationsmethoden als TypedArray. const Puffer = neuer ArrayBuffer(8); const dataView = neue DataView(Puffer); Bietet die Methoden getInt8, getUint8, getInt16, getUint16, getInt32, getUint32, getFloat32, getFloat64. Es gibt zwei Parameter, der erste ist die Abschnittsposition und der zweite ist die Byte-Reihenfolge, die nicht erforderlich ist. Der Rückgabewert sind die Byte-Daten an der entsprechenden Position. const d1 = dataView.getUint8(1); const d2 = dataView.getUint8(1, true); Die Byteposition ist leicht zu verstehen. Die Bytereihenfolge kann unter „Bytereihenfolge verstehen“ nachgelesen werden. Im Allgemeinen lautet sie:
Standardmäßig wird die Big-Endian-Bytereihenfolge verwendet. Wenn Sie die Little-Endian-Bytereihenfolge verwenden möchten, müssen Sie „true“ übergeben. Auf diese Weise verfügen wir über eine grundlegende Lösung zum Lesen und Schreiben von Binärdateien. Tatsächliche Anwendungsszenarien beinhalten jedoch häufig komplexere Daten, sodass Objekte wie Blob und FileReader für bestimmte Szenarien abgeleitet werden. KlecksBlob ist die Abkürzung für Binary Large Object. Der Unterschied zwischen ArrayBuffer und Blob besteht darin, dass ArrayBuffer reine Binärdaten sind, während Blob Binärdaten mit MIME-Typ sind. Und es ist einfach, Blob-Objekte aus String, ArrayBuffer, TypedArray, DataView und Blob zu generieren. const blob1 = new Blob(["hallo"], { type: "text/plain" }); const blob2 = neuer Blob([neuer Uint8Array([72, 101, 108, 108, 111]), " ", "Welt"], { Typ: "Text/Plain" }); Eigentum:
Verfahren:
URLWährend der Entwicklung erhalten wir Binärdaten des Bildes, die wir in Base64 konvertieren und in src schreiben können. Wenn die Datenmenge jedoch groß ist oder es sich um Videodaten handelt, überschreiten sie die zulässige Länge. Wir können URL.createObjectURL verwenden, um einfach eine Ressourcen-URL zu erstellen. const url = URL.createObjectURL(blob1); Es wird eine Ressourcen-URL ähnlich wie blob:https://example.com/a6728d20-2e78-4497-9d6c-0ed61b93f11e generiert, die zur Verwendung direkt in src geschrieben werden kann. Verwenden Sie URL.revokeObjectURL(url), um die Referenz zu zerstören und den Speicherverbrauch freizugeben, wenn dieser nicht verwendet wird. Daten lesenWenn wir die Daten anzeigen möchten, gibt es zwei Möglichkeiten. Die erste Methode verwendet das Response-Objekt, um String-Daten oder ArrayBuffer-Daten direkt zu lesen. const responseText = warte auf neue Antwort (blob2).text(); const responseBuf = warte auf neue Antwort (blob2).arrayBuffer(); Die zweite Methode verwendet das FileReader-Objekt. Konstante Leser = neuer FileReader(); reader.onload = Funktion (e) { Konsole.log(Leser.Ergebnis); }; Leser.readAsText(blob2); DateiDie Datei erbt von Blob und fügt dateibezogene Attributinformationen hinzu.
DateilisteDas FileList-Objekt ist eine Sammlung von File-Objekten. Erscheint normalerweise in:
Eigentum:
Verfahren:
DateileserFileReader wurde im Abschnitt Blob erwähnt. Tatsächlich wird das FileReader-Objekt speziell zum Lesen von Blob-Objekten, einschließlich erweiterter Dateiobjekte, verwendet. Eigentum:
Ereignis:
Verfahren:
Die Daten werden wie im obigen Beispiel in Textform zurückgegeben: Konstante Leser = neuer FileReader(); reader.onload = Funktion (e) { Konsole.log(Leser.Ergebnis); }; Leser.readAsText(blob2); Ressourcen zum Thema
ZusammenfassenDamit ist dieser Artikel über verschiedene binäre Objektbeziehungen in JavaScript abgeschlossen. Weitere relevante Inhalte zu binären Objektbeziehungen in JS finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! |
<<: Detaillierte Erklärung der Mencached-Cache-Konfiguration basierend auf Nginx
Verwenden Sie natives JS, um ein neuneckiges Rast...
1. Einleitung Docker verfügt über ein Orchestrier...
Heute zeige ich Ihnen einen Neon-Button-Animation...
Inhaltsverzeichnis 1. Indextyp 1. B+ Baum 2. Was ...
Früher bestand das Unterstreichen in HTML darin, ...
Inhaltsverzeichnis 1. Stückliste 2. Zusammensetzu...
Ich habe vor Kurzem Kafka gelernt. Als ich mich d...
Inhaltsverzeichnis Cache-Funktion in vue2 Transfo...
In diesem Artikel wird das kostenlose MySQL-Insta...
Wie lange ist es her, dass ich meine Kolumne aktu...
In diesem Artikel wird ein JS-Spezialeffekt vorge...
Vorwort Die Zeichenfolgentypen der MySQL-Datenban...
Methode 1: Verwenden Sie den Befehl SET PASSWORD ...
1. Hintergrund Im Allgemeinen verwenden wir für D...
Mit dem Aufkommen von Docker haben sich viele Die...