Vorwort
In Node.js ist eine Buffer-Klasse definiert, die zum Erstellen eines Pufferbereichs speziell zum Speichern von Binärdaten verwendet wird. In diesem Artikel wird detailliert beschrieben, wie die Buffer-Klasse in node.js mit Binärdaten umgeht. Schauen wir uns ohne weitere Umschweife die ausführliche Einführung an.
Pufferobjekt erstellen
Erste Methode: Verwenden Sie direkt ein Array, um den Pufferbereich zu initialisieren
var arr = [0,1,2] var buf = new Buffer(arr) console.log(buf)
Ausführungseffekt:
Zweitens: Verwenden Sie direkt eine Zeichenfolge, um den Cache-Bereich zu initialisieren
var str = 'hello' var buf = new Buffer(str) console.log(buf)
Ausführungseffekt:
in Node In js , die Codierung und Decodierung der Zeichenfolgeneingabe und -ausgabe wird automatisch durchgeführt und standardmäßig wird die UTF8-Codierung verwendet.
Konvertierung zwischen Buffer-Objekten und String-Objekten
(1) toString
Sie können die toString-Methode des Buffer-Objekts verwenden, um das Buffer-Objekt zu konvertieren in Die gespeicherten Daten werden wie folgt in eine Zeichenfolge umgewandelt:
buf.toString([encoding],[start],[end])
Optionaler Parameter 1: Wird verwendet, um das im Pufferobjekt gespeicherte Textcodierungsformat anzugeben Der Standardparameter ist UTF8.
Optionaler Parameter 2: Geben Sie die Startposition der konvertierten Daten in Bytes an.
Optionaler Parameter 3: Geben Sie die Endposition der konvertierten Daten in Bytes an.
Der Beispielcode lautet wie folgt:
var buf = new Buffer('阁下何不随风起') console.log(buf) console.log(buf.toString('utf8',9,12)) console.log(buf.toString('utf8',12,buf.length))
(2) schreiben
Manchmal müssen wir schreiben das bereits erstellte Buffer-Objekt Um einen String zu schreiben, können Sie die write-Methode des Buffer-Objekts verwenden.
buf.write(string,[offset],[length],[encodign])
Erforderlicher Parameter 1: Geben Sie die zu schreibende Zeichenfolge an.
Optionale Parameter 2-3: Angeben die Schreibposition nach der Konvertierung der Zeichenfolge in Bytedaten. Die Schreibposition der Bytedaten reicht vom 1. + Offset-Byte bis zum Offset + Längenbyte.
Optionaler Parameter 4: Kodierungsformat, Standard utf8
Der Code lautet wie folgt:
var buf = new Buffer('阁下何不随风起') buf.write('扶摇直上千万里',0,buf.length) console.log(buf.toString())
(3) StringDecoder-Objekt
In Node.js können Sie auch das StringDecoder-Objekt verwenden, um die Daten im Buffer-Objekt zu konvertieren Dieses Objekt hat die gleiche Funktion wie die toString-Methode des Buffer-Objekts, bietet jedoch eine bessere Unterstützung für Zeichenfolgen im UTF8-Kodierungsformat.
Wenn Sie das StringDecoder-Objekt verwenden, müssen Sie zuerst das string_decoder-Modul in Node.js laden. Die Methode lautet wie folgt:
var StringDecoder = require('string_decoder').StringDecoder
Nach dem Laden des string_decoder-Moduls können Sie wie folgt ein StringDecoder-Objekt erstellen:
var decoder = new StringDecoder([encoding])
Wenn Sie das konvertieren müssen Daten im Buffer-Objekt Bei Verwendung einer Zeichenfolge können Sie die Schreibmethode des StringDecoder-Objekts verwenden. Sie können einen Parameter in der Schreibmethode verwenden, um das zu konvertierende Buffer-Objekt anzugeben. Der Code lautet wie folgt:
decoder.write(buffer)
Okay, vergleichen wir die toString-Methode des Buffer-Objekts und die write-Methode von StringDecoder, welche hat eine bessere Unterstützung für utf8.
Die toString-Methode von Buffer lautet wie folgt:
//在UTF-8编码格式下,将1个文字转换为多个字节 var buf = new Buffer('阁下何不随风起') console.log(buf) //0x是我手动加的 var str1 = new Buffer([0xe9, 0x98, 0x81, 0xe4, 0xb8, 0x8b, 0xe4, 0xbd]) console.log(str1.toString()) var str2 = new Buffer([0x95, 0xe4, 0xb8, 0x8d, 0xe9, 0x9a, 0x8f, 0xe9, 0xa3, 0x8e, 0xe8, 0xb5, 0xb7]) console.log(str2.toString())
Natürlich können Sie auch die folgende Methode verwenden, um zwei Pufferobjekte zu verbinden und dann den toString zu verwenden Methode zum Übertragen der Daten in einen String konvertieren, aber wenn die Länge des Pufferobjekts groß ist, wird die Leistung dieses Vorgangs langsamer.
Buffer.concat([str1,str2]).toString()
Die Schreibmethode von StringDecoder ist wie folgt:
//在UTF-8编码格式下,将1个文字转换为多个字节 var buf = new Buffer('阁下何不随风起') console.log(buf) //StringDecoder var StringDecoder = require('string_decoder').StringDecoder var decoder = new StringDecoder() //0x是我手动加的 var str1 = new Buffer([0xe9, 0x98, 0x81, 0xe4, 0xb8, 0x8b, 0xe4, 0xbd]) console.log(decoder.write(str1)) var str2 = new Buffer([0x95, 0xe4, 0xb8, 0x8d, 0xe9, 0x9a, 0x8f, 0xe9, 0xa3, 0x8e, 0xe8, 0xb5, 0xb7]) console.log(decoder.write(str2))
Sie können erkennen, wer bessere Unterstützung hat ein Blick.
Konvertierung zwischen Buffer-Objekten und JSON-Objekten
In Node.js können Sie die im Buffer-Objekt gespeicherten Daten mit der JSON.stringify-Methode in einen String konvertieren Verwenden Sie auch die JSON.parse-Methode, um eine konvertierte Zeichenfolge in einem Array wiederherzustellen.
Cache-Daten kopieren
Wenn Sie die im Pufferobjekt gespeicherten Binärdaten in ein anderes Pufferobjekt kopieren müssen, können Sie die Kopiermethode des Pufferobjekts verwenden Die Kopiermethode lautet wie folgt:
buf.copy(targetBuffer,[targetStart],[sourceStart],[sourceEnd])
Erforderlicher Parameter 1: Geben Sie das zu kopierende Zielpufferobjekt an
Optionaler Parameter 2: Geben Sie die Anzahl der Bytes im Zielpufferobjekt an, ab dem mit dem Schreiben von Daten begonnen werden soll.
Optionaler Parameter 3: Geben Sie die Startposition an, wenn Daten vom Kopierquellpufferobjekt abgerufen werden. Der Standardwert ist 0
Optionaler Parameter 4: Geben Sie die Endposition an, wenn Daten vom Kopierquellpufferobjekt abgerufen werden. Der Standardwert ist die Länge des Kopierquellobjekts
Der Beispielcode ist wie folgt:
//目标:将buf1 Buffer对象中的内容复制到buf2 Buffer对象中 //复制的目标起始位置为buf2 Buffer对象中的第11个字节处(第11个字节出开始写入) var buf1 = new Buffer('阁下何不随风起') console.log(buf1) var buf2 = new Buffer(128) buf2.fill(0) console.log(buf2) //关键代码 buf1.copy(buf2,10) //输出复制后的buf2 console.log(buf2) //以字符串的形式打印buf2 var StringDecoder = require('string_decoder').StringDecoder var decoder = new StringDecoder() console.log(decoder.write(buf2))
Klassenmethode der Pufferklasse
(1) isBuffer-Methode
wird verwendet Bestimmen Sie, ob ein Objekt ein Pufferobjekt ist. Verwenden Sie die Methode wie folgt:
Buffer.isBuffer(objc)
Der Beispielcode lautet wie folgt:
var a = 'abcde' var b = new Buffer(10) console.log(typeof a) console.log(typeof b) console.log('---我是奇妙的分隔符----') console.log(Buffer.isBuffer(a)) console.log(Buffer.isBuffer(b))
Console
(2) byteLength-Methode
Sie können die ByteLength-Methode verwenden, um die Anzahl der Bytes eines angegebenen zu berechnen Die Verwendungsmethode lautet wie folgt:
Buffer.byteLength(string,[encoding])
Erforderlicher Parameter 1: Geben Sie die Zeichenfolge an, deren Anzahl an Bytes berechnet werden muss
Optionaler Parameter 2: Kodierungsformat, Standard utf8
Der Beispielcode lautet wie folgt:
var str = '阁下何不随风起' console.log(str.length) console.log(Buffer.byteLength(str,'utf8')) console.log(Buffer.byteLength(str,'base64')) console.log(Buffer.byteLength(str,'utf16le'))
(3)isEncoding方法
isEncoding方法用于检测一个字符串是否为一个有效的编码格式字符串。使用方法如下:
Buffer.isEncoding(encoding)
在isEncoding方法中,使用一个参数,用于指定需要被检测的字符串,如果该字符串为有效的编码格式字符串,则方法返回true,如果该字符串不是一个有效的编码格式字符串,则方法返回false。
示例代码如下:
var str1 = 'utf8' console.log(Buffer.isEncoding(str1)) var str2 = 'utf16le' console.log(Buffer.isEncoding(str2)) var str3= 'utf16e' console.log(Buffer.isEncoding(str3))