Heim Web-Frontend js-Tutorial Ausführliche Erläuterung der Verwendung von Buffer zum Kodieren und Dekodieren von Binärdaten in Node.js

Ausführliche Erläuterung der Verwendung von Buffer zum Kodieren und Dekodieren von Binärdaten in Node.js

Feb 04, 2017 am 09:51 AM

JavaScript ist sehr gut im Umgang mit Zeichenfolgen, aber da es ursprünglich für den Umgang mit HTML-Dokumenten entwickelt wurde, ist es nicht sehr gut im Umgang mit Binärdaten. JavaScript hat keinen Byte-Typ, keine strukturierten Typen, nicht einmal Byte-Arrays, nur Zahlen und Zeichenfolgen. (Originaltext: JavaScript hat keinen Byte-Typ – es hat nur Zahlen – oder strukturierte Typen oder http://skylitecellars.com/ sogar Byte-Arrays: Es hat nur Strings.)

Weil Node es ist Basierend auf JavaScript kann es natürlich mit Textprotokollen wie HTTP umgehen, Sie können es aber auch zur Interaktion mit Datenbanken, zum Hochladen von Bildern oder Dateien usw. verwenden. Sie können sich vorstellen, wie schwierig es wäre, diese Dinge nur mit Zeichenfolgen zu erledigen. Früher verarbeitete Node Binärdaten durch die Codierung von Bytes in Textzeichen. Dieser Ansatz erwies sich jedoch später als undurchführbar, ressourcenverschwendend, langsam, unflexibel und schwierig zu warten.

Knoten verfügt über eine binäre Pufferimplementierung Buffer. Diese Pseudoklasse stellt eine Reihe von APIs für die Verarbeitung binärer Daten bereit und vereinfacht Aufgaben, die die Verarbeitung binärer Daten erfordern. Die Länge des Puffers wird durch die Länge der Bytedaten bestimmt, und Sie können die Bytedaten im Puffer zufällig festlegen und abrufen.

Hinweis: Es gibt eine Besonderheit an der Buffer-Klasse. Der von den Bytedaten im Puffer belegte Speicher wird nicht auf dem VM-Speicherheap zugewiesen, was bedeutet, dass diese Objekte Wird nicht vom Garbage-Collection-Algorithmus von JavaScript verarbeitet, sondern durch eine permanente Speicheradresse ersetzt, die nicht geändert wird, wodurch auch CPU-Verschwendung vermieden wird, die durch das Kopieren von Pufferinhalten in den Speicher verursacht wird.

Erstellen Sie einen Puffer

Sie können einen Puffer mit einer UTF-8-Zeichenfolge wie folgt erstellen:

Sie können auch einen Puffer mit einer Zeichenfolge in a erstellen angegebene Kodierung:
var buf = new Buffer(‘Hello World!');
Nach dem Login kopieren

Akzeptable Zeichenkodierungen und Bezeichner sind wie folgt:
var buf = new Buffer('8b76fde713ce', 'base64');
Nach dem Login kopieren

1.ascii – ASCI, gilt nur für den ASCII-Zeichensatz.

2.utf8 – UTF-8, diese Codierung mit variabler Breite ist für jedes Zeichen im Unicode-Zeichensatz geeignet. Sie ist zur bevorzugten Codierung in der Web-Welt geworden und ist auch der Standard-Codierungstyp von Node.

3.base64 – Base64, diese Kodierung basiert auf 64 druckbaren ASCII-Zeichen zur Darstellung von Binärdaten. Base64 wird normalerweise zum Einbetten von Binärdaten in Zeichendokumente verwendet, die bei Bedarf in Zeichenfolgen umgewandelt werden können in das ursprüngliche Binärformat umwandeln.

Wenn keine Daten zum Initialisieren des Puffers vorhanden sind, können Sie einen leeren Puffer mit der angegebenen Kapazität erstellen:

Pufferdaten abrufen und festlegen
var buf = new Buffer(1024); // 创建一个1024字节的缓冲
Nach dem Login kopieren

Erstellen oder empfangen Ein Puffer Nach dem Objekt möchten Sie möglicherweise dessen Inhalt anzeigen oder ändern. Sie können über den Operator [] auf ein bestimmtes Byte des Puffers zugreifen:

Hinweis: Wenn Sie (verwenden Sie die Pufferkapazitätsgröße to) Erstellen eines Wenn der Puffer initialisiert wurde, muss beachtet werden, dass die gepufferten Daten nicht auf 0 initialisiert werden, sondern zufällige Daten.
var buf = new Buffer('my buffer content');
// 访问缓冲内第10个字节
console.log(buf[10]); // -> 99
Nach dem Login kopieren

Sie können die Daten an jeder Stelle im Puffer wie folgt ändern:
var buf = new Buffer(1024);
console.log(buf[100]); // -> 5 (某个随机值)
Nach dem Login kopieren

Hinweis: In einigen Fällen verursachen einige Puffervorgänge keine Fehler, wie zum Beispiel:
buf[99] = 125; // 把第100个字节的值设置为125
Nach dem Login kopieren

1. Der maximale Wert der Bytes im Puffer beträgt 255. Wenn einem Byte eine Nummer größer als 256 zugewiesen wird, ist es Modulo 256 und das Ergebnis wird diesem Byte zugewiesen.

2. Wenn einem bestimmten Byte im Puffer der Wert 256 zugewiesen wird, ist sein tatsächlicher Wert 0 (Anmerkung des Übersetzers: Tatsächlich wiederholt mit dem ersten, 256%256=0)

3 Bei Verwendung von A Die Gleitkommazahl weist einem bestimmten Byte im Puffer einen Wert zu, z. B. 100,7. Der tatsächliche Wert ist der ganzzahlige Teil der Gleitkommazahl – 100
4 Wenn die Pufferkapazität überschritten wird, schlägt der Zuweisungsvorgang fehl. Der Puffer wird in keiner Weise geändert.

Sie können das Längenattribut verwenden, um die Länge des Puffers zu erhalten:

Sie können die Pufferlänge auch verwenden, um über den Inhalt des Puffers zu iterieren, um jedes Byte zu lesen oder festzulegen :
var buf = new Buffer(100);
console.log(buf.length); // -> 100
Nach dem Login kopieren

Der obige Code erstellt einen neuen Puffer mit 100 Bytes und setzt jedes Byte im Puffer von 0 auf 99.
var buf = new Buffer(100);
for(var i = 0; i < buf.length; i++) {
    buf[i] = i;
}
Nach dem Login kopieren

Pufferdaten aufteilen

Sobald Sie einen Puffer erstellt oder empfangen haben, müssen Sie möglicherweise einen Teil der Pufferdaten extrahieren. Sie können den vorhandenen Puffer aufteilen, indem Sie die Startposition angeben, um einen weiteren, kleineren Puffer zu erstellen Puffer:

Beachten Sie, dass beim Teilen eines Puffers kein neuer Speicher zugewiesen oder kopiert wird. Der neue Puffer verwendet nur einen bestimmten Teil der vom übergeordneten Puffer gepufferten Daten. (durch die Startposition vorgegeben). Diese Passage enthält mehrere Bedeutungen.
var buffer = new Buffer("this is the content of my buffer");

var smallerBuffer = buffer.slice(8, 19);
console.log(smallerBuffer.toString()); // -> "the content"
Nach dem Login kopieren

Wenn Ihr Programm zunächst den Inhalt des übergeordneten Puffers ändert, wirken sich diese Änderungen auch auf die zugehörigen untergeordneten Puffer aus, da der übergeordnete Puffer und der untergeordnete Puffer unterschiedliche JavaScript-Objekte sind und daher leicht ignoriert werden können dieses Problem verursachen und einige potenzielle Fehler verursachen.

Zweitens: Wenn Sie auf diese Weise einen kleineren untergeordneten Puffer aus dem übergeordneten Puffer erstellen, bleibt das übergeordnete Pufferobjekt nach Abschluss des Vorgangs erhalten und wird nicht durch Müll gesammelt , Es kann leicht zu Speicherverlusten kommen.

Hinweis: Wenn Sie sich Sorgen über Speicherverluste machen, können Sie die Kopiermethode anstelle der unten vorgestellten Slice-Operation verwenden.

Pufferdaten kopieren

Sie können Kopieren verwenden, um einen Teil des Puffers wie folgt in einen anderen Puffer zu kopieren:

Der obige Code kopiert den 9. bis 9. Teil von 20 Bytes bis zum Anfang des Zielpuffers.
var buffer1 = new Buffer("this is the content of my buffer");
var buffer2 = new Buffer(11);
var targetStart = 0;
var sourceStart = 8;
var sourceEnd = 19;
buffer1.copy(buffer2, targetStart, sourceStart, sourceEnd);
console.log(buffer2.toString()); // -> "the content"
Nach dem Login kopieren

Gepufferte Daten dekodieren

Gepufferte Daten können wie folgt in eine UTF-8-Zeichenfolge konvertiert werden:

var str = buf.toString();
Nach dem Login kopieren

还可以通过指定编码类型来将缓冲数据解码成任何编码类型的数据。比如,你想把一个缓冲解码成base64字符串,可以这么做:

var b64Str = buf.toString("base64");
Nach dem Login kopieren

使用toString函数,你还可以把一个UTF-8字符串转码成base64字符串:

var utf8String = &#39;my string&#39;;
var buf = new Buffer(utf8String);
var base64String = buf.toString(&#39;base64&#39;)
Nach dem Login kopieren

小结

有时候,你不得不跟二进制数据打交道,但是原生JavaScript又没有明确的方式来做这件事,于是Node提供了Buffer类,封装了一些针对连续内存块的操作。你可以在两个缓冲之间切分或复制内存数据。

你也可以把一个缓冲转换成某种编码的字符串,或者反过来,把一个字符串转化成缓冲,来访问或处理每个bit。

更多Node.js中使用Buffer编码、解码二进制数据详解相关文章请关注PHP中文网!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Wie erstelle ich meine eigenen JavaScript -Bibliotheken? Mar 18, 2025 pm 03:12 PM

In Artikel werden JavaScript -Bibliotheken erstellt, veröffentlicht und aufrechterhalten und konzentriert sich auf Planung, Entwicklung, Testen, Dokumentation und Werbestrategien.

Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Wie optimiere ich den JavaScript -Code für die Leistung im Browser? Mar 18, 2025 pm 03:14 PM

In dem Artikel werden Strategien zur Optimierung der JavaScript -Leistung in Browsern erörtert, wobei der Schwerpunkt auf die Reduzierung der Ausführungszeit und die Minimierung der Auswirkungen auf die Lastgeschwindigkeit der Seite wird.

Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Was soll ich tun, wenn ich auf den Codendruck auf Kleidungsstücke für Front-End-Thermalpapier-Quittungen stoße? Apr 04, 2025 pm 02:42 PM

Häufig gestellte Fragen und Lösungen für das Ticket-Ticket-Ticket-Ticket in Front-End im Front-End-Entwicklungsdruck ist der Ticketdruck eine häufige Voraussetzung. Viele Entwickler implementieren jedoch ...

Wie debugge ich den JavaScript -Code effektiv mithilfe von Browser -Entwickler -Tools? Wie debugge ich den JavaScript -Code effektiv mithilfe von Browser -Entwickler -Tools? Mar 18, 2025 pm 03:16 PM

In dem Artikel werden effektives JavaScript -Debuggen mithilfe von Browser -Entwickler -Tools, der Schwerpunkt auf dem Festlegen von Haltepunkten, der Konsole und der Analyse der Leistung erörtert.

Wie benutze ich Javas Sammlungsrahmen effektiv? Wie benutze ich Javas Sammlungsrahmen effektiv? Mar 13, 2025 pm 12:28 PM

In diesem Artikel wird der effektive Gebrauch des Sammlungsrahmens von Java untersucht. Es betont die Auswahl geeigneter Sammlungen (Liste, Set, Karte, Warteschlange) basierend auf Datenstruktur, Leistungsanforderungen und Thread -Sicherheit. Optimierung der Sammlungsnutzung durch effizientes Gebrauch

Wie verwende ich Quellkarten zum Debuggen, um den JavaScript -Code zu debuggen? Wie verwende ich Quellkarten zum Debuggen, um den JavaScript -Code zu debuggen? Mar 18, 2025 pm 03:17 PM

In dem Artikel wird erläutert, wie Quellkarten zum Debuggen von JavaScript verwendet werden, indem er auf den ursprünglichen Code zurückgegeben wird. Es wird erläutert, dass Quellenkarten aktiviert, Breakpoints eingestellt und Tools wie Chrome Devtools und WebPack verwendet werden.

Erste Schritte mit Chart.js: Kuchen-, Donut- und Bubble -Diagramme Erste Schritte mit Chart.js: Kuchen-, Donut- und Bubble -Diagramme Mar 15, 2025 am 09:19 AM

In diesem Tutorial wird erläutert, wie man mit Diagramm.js Kuchen-, Ring- und Bubble -Diagramme erstellt. Zuvor haben wir vier Chart -Arten von Charts gelernt. Erstellen Sie Kuchen- und Ringdiagramme Kreisdiagramme und Ringdiagramme sind ideal, um die Proportionen eines Ganzen anzuzeigen, das in verschiedene Teile unterteilt ist. Zum Beispiel kann ein Kreisdiagramm verwendet werden, um den Prozentsatz der männlichen Löwen, weiblichen Löwen und jungen Löwen in einer Safari oder den Prozentsatz der Stimmen zu zeigen, die verschiedene Kandidaten bei der Wahl erhalten. Kreisdiagramme eignen sich nur zum Vergleich einzelner Parameter oder Datensätze. Es ist zu beachten, dass das Kreisdiagramm keine Entitäten ohne Wert zeichnen kann, da der Winkel des Lüfters im Kreisdiagramm von der numerischen Größe des Datenpunkts abhängt. Dies bedeutet jede Entität ohne Anteil

Wer bekommt mehr Python oder JavaScript bezahlt? Wer bekommt mehr Python oder JavaScript bezahlt? Apr 04, 2025 am 12:09 AM

Es gibt kein absolutes Gehalt für Python- und JavaScript -Entwickler, je nach Fähigkeiten und Branchenbedürfnissen. 1. Python kann mehr in Datenwissenschaft und maschinellem Lernen bezahlt werden. 2. JavaScript hat eine große Nachfrage in der Entwicklung von Front-End- und Full-Stack-Entwicklung, und sein Gehalt ist auch beträchtlich. 3. Einflussfaktoren umfassen Erfahrung, geografische Standort, Unternehmensgröße und spezifische Fähigkeiten.

See all articles