Heim  >  Artikel  >  Web-Frontend  >  So verwenden Sie die Buffer-Klasse in node.js, um Binärdaten zu verarbeiten

So verwenden Sie die Buffer-Klasse in node.js, um Binärdaten zu verarbeiten

高洛峰
高洛峰Original
2016-12-05 11:08:14898Durchsuche

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:

So verwenden Sie die Buffer-Klasse in node.js, um Binärdaten zu verarbeiten

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:

So verwenden Sie die Buffer-Klasse in node.js, um Binärdaten zu verarbeiten

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))

   



Stellungnahme:
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