JavaScript Es ist eine Sprache, die Zeichenketten gut handhabt, aber da sie ursprünglich für die Verarbeitung von HTML-Dokumenten entwickelt wurde, ist sie nicht sehr gut im Umgang mit Binärdaten, tatsächlich hat JavaScript keinen binären Datentyp als solchen, sondern enthält nur strukturierte Zahlen oder Typen.
Wie wir bereits wissen Node.js basiert auf JavaScript und es kann mit Textprotokollen wie HTTP umgehen, wo Sie dies auch verwenden können, um eine Kommunikation mit Datenbanken herzustellen, Bilder zu manipulieren und sogar mit Dateimanipulationen umzugehen, und aufgrund dessen, was wir besprochen haben, kann dies nur mit Strings ziemlich kompliziert sein.
Aber um diese binären Manipulationsaufgaben viel einfacher zu machen, Node.js enthält eine binäre Pufferimplementierung, die es uns ermöglicht, die Bytes eines erstellten Puffers ohne große Probleme zu erhalten und zu setzen.
AnforderungenUm die in diesem Tutorial vorgeschlagenen Übungen ausführen zu können, benötigen wir eine funktionsfähige Installation von Node.js In unserem System können wir uns dieses Tutorial ansehen, bevor wir uns weiter damit befassen. Es ist auch wichtig, Zugriff auf einen Rich-Text-Editor zu haben, um die Beispiele zu codieren. Wir können alles verwenden, womit wir uns wohl fühlen, aber wegen seiner Benutzerfreundlichkeit empfehlen wir Erhabener Text o NotePad ++, die auch Plugins für die Syntax haben JavaScript Ja HTML.
Puffererstellung
Um einen Puffer zu erstellen, ist es so einfach, eine neue Instanz der Klasse zu erstellen Puffer(). Sehen wir uns an, wie wir einen einfachen Puffer basierend auf einer UTF-8-Codierung wie folgt erstellen:
var buf = neuer Puffer ('Hallo Welt!'); Konsole.log (buf);Wir werden unser Beispiel über die Konsole ausführen, um die Antwort zu sehen, die es uns gibt Node.js Bezüglich der Erstellung unseres Puffers:
Wie wir sehen, wenn wir unsere Variable drucken polieren, ist die Antwort möglicherweise nicht das, was wir erwartet haben, aber wir müssen daran denken, dass wir eine Instanz von . erstellen Puffer und was diese Klasse tut, ist, ihren Inhalt gemäß einer bestimmten Zeichencodierung zu codieren.
Wir können auch einen String-Puffer mit anderen Codierungen erstellen, der gültig ist, solange wir dasselbe wie das zweite Argument angeben, mal sehen:
var buf2 = neuer Puffer ('9b38kte610la', 'base64'); Konsole.log (buf2);Wie wir sehen, können wir die Codierung problemlos angeben. Schauen wir uns dann an, welche Codierungsarten akzeptiert werden und ihre jeweiligen Bezeichner:
ASCII - ASCIIDies ist die Standardcodierungsart und wird durch die gleichnamige Zeichencodierung eingeschränkt.
utf8 - UTF-8Dies ist eine Variable mit der Kodierung, die jedes vorhandene Unicode-Zeichen darstellen kann, und dies ist die Standardkodierung unseres Puffers, falls keines angegeben wird.
base64 - Base64Dies ist ein Codierungstyp, der verwendet wird, um binäre Daten in einem Zeichenfolgenformat darzustellen. ASCII und es wird hauptsächlich verwendet, um Binärdaten in Textdokumente einzubetten, um sicherzustellen, dass die Daten beim Transport intakt bleiben.
Wenn wir nicht über den anfänglichen Inhalt für unseren Puffer verfügen und einen erstellen müssen, können wir dies tun, indem wir seine Kapazität angeben. Dazu gehen wir wie folgt vor:
var buf = neuer Puffer (1024);Damit erstellen wir einen 1024-Byte-Puffer für unsere zukünftigen Operationen.
Behandlung von Bytes im Puffer
Nachdem wir den Puffer erstellt oder erhalten haben, möchten wir ihn möglicherweise überprüfen und seinen Inhalt ändern. Um auf die darin enthaltenen Bytes zuzugreifen, können wir zunächst die Klammern wie folgt verwenden:
var buf = new Buffer ('hier ist der Inhalt meines Puffers'); console.log (buf [10]);Wenn wir unser Beispiel ausführen, erhalten wir die zehnte Position des Puffers, wir können sogar zur neunten Position des Puffers wechseln und das Ergebnis sehen, mal sehen, wie es aussieht:
Wie wir sehen, erhalten wir zufällige Bytes für die Positionen unseres Puffers, selbst wenn wir den Inhalt einer beliebigen Position darin manipulieren müssen, können wir Folgendes tun:
var buf = neuer Puffer ('hier ist der Inhalt meines neuen Puffers'); buf [2] = 110; buf [6] = 180; buf [10] = 90; console.log (buf [2]); console.log (buf [6]); console.log (buf [10]);Sehen wir uns die Konsolenantwort unseres Beispiels an:
Wie wir gesehen haben, können wir den Inhalt bestimmter Positionen innerhalb unseres Puffers ohne große Probleme ändern, außerdem können wir die Größe unseres Puffers mit der Eigenschaft ermitteln Länge wie folgt:
var buf = neuer Puffer (100); console.log (buf.länge);Wenn wir Beobachter sind, können wir sehen, dass die Antwort unserer Konsole 100 ist. Nachdem wir diesen Wert erhalten haben, können wir damit über unseren Puffer iterieren und so jede Position manipulieren, um ihren Wert zu erhalten oder einen bestimmten Wert festzulegen. Mal sehen a einfaches Beispiel dafür:
var buf = neuer Puffer (100); für (var i = 0; i <buf.length; i ++) {buf [i] = i; } Konsole.log (buf);In diesem Beispiel haben wir ein neues erstellt Puffer mit einer Kapazität von 100 Bytes und dann setzen wir jedes Byte mit einem Wert von 0 bis 99, schließlich sehen wir uns die Antwort der Konsole an, wenn wir unser Beispiel ausführen:
Pufferdatenextraktion
Ein weiteres interessantes Merkmal des Puffers, sobald wir ihn erstellt oder erhalten haben, besteht darin, einen Teil davon extrahieren zu können. Wir können es "zerhacken", um es irgendwie auszudrücken und einen weiteren kleineren Puffer mit diesem Teil, den wir zerhackt haben, zu erstellen, ohne zu vergessen, von und wohin wir es zerhacken werden. Sehen wir uns ein Beispiel an, um das zu veranschaulichen, was wir erklärt haben:
var buffer_complete = new Buffer ("das ist der Inhalt meines Puffers, den wir zerhacken werden"); var buffer_small = full_buffer.slice (26, 55); console.log (buffer_small.toString());Wie wir sehen, erstellen wir zuerst die Instanz unseres Puffers mit dem anfänglichen Inhalt, dann mit der Funktion Scheibe () Wir geben an, von wo und von wo wir den Inhalt beziehen, wir weisen den Inhalt einer neuen Variablen zu und decodieren schließlich den Inhalt, um den Inhalt unseres zweiten Puffers visualisieren zu können Beispiel:
Es ist wichtig zu erwähnen, dass wir beim Schneiden eines neuen Puffers keinen neuen Systemspeicher verwenden, dieser neue Puffer verwendet den Speicher des Vaters, da er nur darauf verweist, aber mit einem anderen Anfang und Ende. Dies kann zu einigen Problemen führen, wenn wir nicht aufpassen, da wir am gleichen Puffer arbeiten, dafür empfehlen wir die Arbeit mit der Methode Kopieren um die Probleme zu vermeiden, die wir unten sehen werden.
Puffer kopieren
Wie bereits erwähnt, können wir beim Schneiden eines Puffers einige Probleme bekommen, wenn wir nicht vorsichtig sind, aber dafür haben wir die Methode Kopieren, mit dem wir den Inhalt eines Puffers in einen neuen Puffer kopieren können, indem wir eine neue Instanz und einen neuen Speicherplatz verwenden.
var buffer1 = new Buffer ("Inhaltspuffer Nummer 1, Inhalt zu kopieren"); var Puffer2 = neuer Puffer (20); var startobj = 0; var startSource = 26; var sourceEnd = 50; buffer1.copy (buffer2, startobj, startSource, endSource); console.log (buffer2.toString());Wie wir sehen, erstellen wir zwei verschiedene Puffer, wobei der erste den Inhalt hat und der zweite nur die Größe, wir geben den Anfang für unseren zweiten Puffer an und auf die gleiche Weise geben wir den Anfang und das Ende für die an neuen Puffer, den wir kopieren werden, sehen wir uns die Antwort der Konsole beim Ausführen des Beispiels an:
Entschlüsseln eines Puffers
Wie wir in den vorherigen Beispielen gesehen haben, konnten wir den ursprünglichen Inhalt unseres Puffers mit der Methode toString(), dies wird als Decodierung des Puffers bezeichnet, wobei wie die Instanz der Klasse Puffer() Wenn wir nichts angeben, decodieren wir es standardmäßig zu UTF-8.
Wir können sogar eine Zeichenfolge transkodieren UTF-8 zu base64 Um einen Fall zu erwähnen, sehen wir uns:
var stringutf8 = 'meine neue Zeichenfolge'; var buf = neuer Puffer (stringutf8); var base64string = buf.toString ('base64') console.log (base64string);Lassen Sie uns zum Schluss sehen, wie wir unseren ursprünglichen String transkodiert haben:
Damit beenden wir dieses Tutorial, in dem wir gelernt haben, wie man mit Binärdaten in Node.js danke an die klasse Puffer, die es uns ermöglicht, ihn vom Lesen, Schreiben, Erhalten kleiner Teile davon, Kopieren in neue Instanzen und sogar Umwandeln dieses Puffers in neue Arten von Codierung für seine Manipulation in unseren Programmen zu manipulieren.