JavaScript ist gut im Umgang mit Saiten, aber da es ursprünglich für HTML -Dokumente ausgelegt war, ist es nicht sehr gut, binäre Daten zu behandeln. JavaScript hat keinen Byte -Typ, keine strukturierten Typen und sogar keine Byte -Arrays, nur Zahlen und Zeichenfolgen. (Originaltext: JavaScript hat keinen Byte -Typ - er hat nur Zahlen - oder strukturierte Typen oder http://skylitecellars.com/ sogar Byte -Arrays: Es hat nur Zeichenfolgen.)
Da der Knoten auf JavaScript basiert, kann er auf natürliche Weise Textprotokolle wie HTTP verarbeiten, aber Sie können es auch verwenden, um mit Datenbanken zu interagieren, Bilder oder Datei -Uploads usw. zu verarbeiten. Zuvor hatte Knoten Binärdaten durch die Codierung von Byte in Textzeichen verarbeitet. Diese Methode erwies sich jedoch später als nicht durchführbar, Ressourcen verschwendeten, langsam, unflexibel und schwer zu warten.
Node hat einen Binärpuffer -Implementierungspuffer. Diese Pseudoklasse bietet eine Reihe von APIs für die Verarbeitung von Binärdaten und vereinfacht Aufgaben, die die Verarbeitung von Binärdaten erfordern. Die Länge des Puffers wird durch die Länge der Byte -Daten bestimmt, und Sie können die Byte -Daten zufällig in den Puffer einstellen und abrufen.
Hinweis: Die Pufferklasse hat einen besonderen Platz. Der von den Byte -Daten im Puffer besetzte Speicher wird in JavasCRP nicht zugewiesen.
Es wird VM -Speicherhaufen, dh diese Objekte werden nicht durch den Müllsammlungsalgorithmus von JavaScript verarbeitet und durch eine dauerhafte Speicheradresse ersetzt, die nicht geändert wird, wodurch auch CPU -Abfälle vermieden werden, die durch das Kopieren von Speicherkopieren gepufferter Inhalte verursacht werden.
Erstellen Sie einen Puffer
Sie können einen Puffer mit einer solchen UTF-8-Zeichenfolge erstellen:
Die Codekopie lautet wie folgt:
var buf = neuer Buffer ('Hallo Welt!');
Sie können auch einen Puffer mit einer angegebenen Codierung erstellen:
Die Codekopie lautet wie folgt:
var buf = new buffer ('8b76fde713ce', 'Base64');
Die akzeptable Zeichenkodierung und Identifizierung sind wie folgt:
1.ascii-asci, nur für ASCII-Zeichensätze anwendbar.
2.utf8-UTF-8, diese variable Codierung ist für jedes Zeichen im Unicode-Zeichensatz geeignet. Es ist zur bevorzugten Codierung in der Webwelt geworden und ist auch der Standard -Kodierungstyp des Knotens.
3.Base64 - Base64, diese Codierung basiert auf 64 druckbaren ASCII -Zeichen, um binäre Daten darzustellen. Base64 wird normalerweise verwendet, um binäre Daten zu betten, die in Zeichenketten in einem Zeichendokument umgewandelt werden können, und können bei Bedarf in das ursprüngliche binäre Format intakt und Verlust umgewandelt werden.
Wenn keine Daten zur Initialisierung des Puffers vorhanden sind, können Sie einen leeren Puffer mit der angegebenen Kapazitätsgröße erstellen:
Die Codekopie lautet wie folgt:
var buf = neuer Puffer (1024); // Erstellen Sie einen 1024-Byte-Puffer
Holen Sie sich und setzen Sie gepufferte Daten
Nach dem Erstellen oder Empfangen eines gepufferten Objekts möchten Sie den Inhalt möglicherweise anzeigen oder ändern. Sie können über den [] Operator auf ein bestimmtes Byte des Puffers zugreifen:
Die Codekopie lautet wie folgt:
var buf = neuer Buffer ('mein Pufferinhalt');
// Zugriff auf das 10. Byte im Puffer zugreifen
console.log (buf [10]); // -> 99
HINWEIS: Wenn Sie einen initialisierten Puffer erstellen (unter Verwendung der Pufferkapazitätsgröße), stellen Sie sicher, dass die gepufferten Daten nicht auf 0 initialisiert werden, sondern zufällige Daten sind.
Die Codekopie lautet wie folgt:
var buf = neuer Puffer (1024);
console.log (buf [100]); // -> 5 (ein zufälliger Wert)
Sie können die Daten überall im Puffer wie folgt ändern:
Die Codekopie lautet wie folgt:
BUF [99] = 125; // Setzen Sie den Wert des 100. Byte auf 125
Hinweis: In einigen Fällen erzeugen einige Pufferoperationen keine Fehler, wie z. B.:
1. Der Maximalwert von Bytes im Puffer beträgt 255. Wenn einem Byte eine Zahl von mehr als 256 zugewiesen wird, wird es mit 256 moduliert und dann diesem Byte das Ergebnis zuweisen.
2. Wenn ein gepufferter Byte 256 zugeordnet ist, beträgt sein tatsächlicher Wert 0 (Übersetzer Anmerkung: Es wird tatsächlich mit dem ersten wiederholt, 256%256 = 0).
3. Wenn Sie eine schwimmende Punktzahl verwenden, um einem Byte im Puffer einen Wert zuzuweisen, z. B. 100,7, ist der tatsächliche Wert der ganzzahlige Teil der schwimmenden Punktzahl - 100
4. Wenn Sie versuchen, einer Position einen Wert zuzuweisen, der die Pufferkapazität überschreitet, fällt der Zuordnungsvorgang fehl und der Puffer wird nicht geändert.
Sie können das Längenattribut verwenden, um die Pufferlänge zu erhalten:
Die Codekopie lautet wie folgt:
var buf = neuer Puffer (100);
console.log (buf.length); // -> 100
Sie können auch den gepufferten Inhalt mit der Pufferlänge zum Lesen oder Festlegen jedes Byte iterieren:
Die Codekopie lautet wie folgt:
var buf = neuer Puffer (100);
für (var i = 0; i <buf.length; i ++) {
buf [i] = i;
}
Der obige Code erstellt einen neuen Puffer mit 100 Bytes und legt jedes Byte im Puffer von 0 bis 99 fest.
Scheiben gepufferte Daten
Sobald ein Puffer erstellt oder empfangen wurde, müssen Sie möglicherweise einen Teil der gepufferten Daten extrahieren. Sie können den vorhandenen Puffer teilen, indem Sie die Startposition angeben, um einen weiteren kleineren Puffer zu erstellen:
Die Codekopie lautet wie folgt:
var buffer = neuer Buffer ("Dies ist der Inhalt meines Puffers");
var kleinerBuffer = buffer.lice (8, 19);
console.log (kleinerbuffer.toString ()); // -> "Der Inhalt"
Beachten Sie, dass beim Aufteilen eines Puffers kein neuer Speicher zugewiesen oder kopiert wird. Der neue Puffer verwendet den übergeordneten Pufferspeicher, der nur ein Verweis auf ein bestimmtes Datenstück ist (angegeben durch die Startposition). Diese Passage hat mehrere Bedeutungen.
Erstens, wenn Ihr Programm den Inhalt des übergeordneten Puffers ändert, wirken sich diese Änderungen auch auf die relevanten Kinderpuffer aus, da der Elternpuffer und der untergeordnete Puffer unterschiedliche JavaScript -Objekte sind. Daher ist es einfach, dieses Problem zu ignorieren und zu einigen potenziellen Fehler zu führen.
Zweitens, wenn Sie auf diese Weise einen kleineren untergeordneten Puffer aus dem übergeordneten Puffer erstellen, wird das übergeordnete Pufferobjekt nach Abschluss der Operation weiterhin beibehalten und nicht Müll gesammelt. Wenn Sie nicht vorsichtig sind, verursacht dies leicht Speicherleckage.
Hinweis: Wenn Sie sich Sorgen um Speicherleckage machen, können Sie die Kopiermethode anstelle des Slice -Betriebs verwenden. Im Folgenden wird eine Kopie eingeführt.
Kopieren Sie gepufferte Daten
Sie können kopieren, um einen Teil des Puffers in einen anderen Puffer wie diesen zu kopieren:
Die Codekopie lautet wie folgt:
var buffer1 = neuer Puffer ("Dies ist der Inhalt meines Puffers");
var buffer2 = neuer Puffer (11);
var targetStart = 0;
var Sourcestart = 8;
var Sourceend = 19;
Buffer1.Copy (Buffer2, TargetStart, Sourcestart, Sourceend);
console.log (buffer2.toString ()); // -> "Der Inhalt"
Kopieren Sie im obigen Code die 9. bis 20. Bytes des Quellpuffers in die Startposition des Zielpuffer.
Dekodieren gepufferte Daten
Die gepufferten Daten können in eine solche UTF-8-Zeichenfolge konvertiert werden:
Die Codekopie lautet wie folgt:
var str = buf.toString ();
Die gepufferten Daten können auch in alle Codierungstypdaten dekodiert werden, indem der Codierungstyp angegeben wird. Wenn Sie beispielsweise einen Puffer in eine Basis64 -Zeichenfolge dekodieren möchten, können Sie dies tun:
Die Codekopie lautet wie folgt:
var b64str = buf.toString ("Base64");
Mit der Funktion "ToString" können Sie auch eine UTF-8-String in eine Base64-String transkodieren:
Die Codekopie lautet wie folgt:
var utf8string = 'mein String';
var buf = neuer Buffer (UTF8String);
var base64string = buf.toString ('Base64')
Zusammenfassung
Manchmal müssen Sie mit binären Daten umgehen, aber native JavaScript hat keine klare Möglichkeit, dies zu tun. Daher bietet der Knoten eine Pufferklasse, die einige Operationen für kontinuierliche Speicherblöcke zusammenfasst. Sie können Speicherdaten zwischen zwei Puffer teilen oder kopieren.
Sie können einen Puffer auch in eine Art codierter Zeichenfolge umwandeln oder wiederum eine Zeichenfolge in einen Puffer umwandeln, um auf jedes Bit zuzugreifen oder zu verarbeiten.