Node.js の Buffer クラスを使用してバイナリ データを処理する方法

高洛峰
リリース: 2016-12-05 11:08:14
オリジナル
892 人が閲覧しました

はじめに

Node.js では、バイナリ データを格納するためのバッファー領域を作成するために使用される Buffer クラスが定義されています。この記事では、node.js の Buffer クラスがバイナリ データを処理する方法を詳しく紹介します。早速、その詳細を見てみましょう。

バッファオブジェクトを作成する

最初の方法: 配列を直接使用してバッファ領域を初期化します

var arr = [0,1,2]
var buf = new Buffer(arr)
console.log(buf)
ログイン後にコピー

実行効果:

Node.js の Buffer クラスを使用してバイナリ データを処理する方法

2番目の方法: 文字列を直接使用してバッファ領域を初期化します

var str = 'hello'
var buf = new Buffer(str)
console.log(buf)
ログイン後にコピー

実行効果:

Node.js の Buffer クラスを使用してバイナリ データを処理する方法

Node.js では、文字列の入出力のエンコードとデコードが自動的に実行され、デフォルトで UTF8 エンコードが使用されます。

Bufferオブジェクトと文字列オブジェクトの変換

(1) toString

Bufferオブジェクトに保存されているデータを文字列に変換するには、BufferオブジェクトのtoStringメソッドを使用します。

buf.toString([encoding],[start],[end])
ログイン後にコピー

オプションのパラメータ 1: Buffer オブジェクトに保存されるテキストのエンコード形式を指定するために使用されます。デフォルトのパラメータは UTF8 です。


オプションのパラメータ 2: 変換されたデータの開始位置をバイト単位で指定します。


オプションパラメータ3: 変換後のデータの終了位置をバイト単位で指定します。


サンプルコードは次のとおりです:

var buf = new Buffer('阁下何不随风起')
console.log(buf)
console.log(buf.toString('utf8',9,12))
console.log(buf.toString('utf8',12,buf.length))
ログイン後にコピー

(2) write


場合によっては、作成された Buffer オブジェクトに文字列を書き込む必要がある場合、 の write メソッドを使用できます。バッファオブジェクト。

buf.write(string,[offset],[length],[encodign])
ログイン後にコピー


必須パラメータ1:書き込む必要がある文字列を指定します


任意パラメータ2-3:文字列をバイトデータに変換した後の書き込み位置を指定します。バイトデータの書き込み位置はStartingです。 1+オフセットバイトから始まり、オフセット+長さバイトで終わります。 Optional Parameter 4:エンコード形式、デフォルトのUTF8


コードは次のとおりです。 StringDecoder オブジェクトは、Buffer オブジェクト内のデータを文字列に変換します。このオブジェクトは Buffer オブジェクトの toString メソッドと同じ機能を持ちますが、UTF8 エンコーディング形式の文字列のサポートが向上します。


StringDecoder オブジェクトを使用する場合、まず Node.js で string_decoder モジュールをロードする必要があります。方法は次のとおりです。

var buf = new Buffer('阁下何不随风起')
buf.write('扶摇直上千万里',0,buf.length)
console.log(buf.toString())
ログイン後にコピー


string_decoder モジュールをロードした後、次のように StringDecoder オブジェクトを作成できます。

var StringDecoder = require('string_decoder').StringDecoder
ログイン後にコピー



Buffer オブジェクト内のデータを文字列に変換する必要がある場合は、StringDecoder オブジェクトの write メソッドを使用して、必要な Buffer オブジェクトを指定することができます。このメソッドは変換された文字列を返します。コードは次のとおりです。

さて、Buffer オブジェクトの toString メソッドと StringDecoder の write メソッドを比較してみましょう。どちらの方がサポートが優れていますか。 utf8の場合。

Buffer の toString メソッドは次のとおりです:

var decoder = new StringDecoder([encoding])
ログイン後にコピー

もちろん、次のメソッドを使用して 2 つのバッファ オブジェクトを接続し、toString メソッドを使用してデータを文字列に変換することもできますが、バッファの長さがオブジェクトが大きいため、この操作のパフォーマンスは比較的アンダーグラウンドなものになります。

decoder.write(buffer)
ログイン後にコピー


StringDecoderの書き込みメソッドは以下の通りです:

//在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())
ログイン後にコピー

誰のサポートが優れているかが一目でわかります。

Buffer オブジェクトと JSON オブジェクト間の変換

Node.js では、JSON.stringify メソッドを使用して Buffer オブジェクトに保存されたデータを文字列に変換したり、JSON.parse メソッドを使用して文字列に変換したりできます。変換された文字列が配列に復元されます。

キャッシュデータのコピー

Buffer オブジェクトに保存されているバイナリ データを別の Buffer オブジェクトにコピーする必要がある場合、Buffer オブジェクトの copy メソッドを使用できます。 copy メソッドは次のように使用します。

必須パラメータ 1: コピーする対象の Buffer オブジェクトを指定します


オプションのパラメータ 2: 対象の Buffer オブジェクトにデータを書き込むバイトを指定します

オプションのパラメータ 3: コピーからデータを取得することを指定しますソースバッファオブジェクト 時刻の開始位置、デフォルトは0です

オプションパラメータ4:コピー元バッファオブジェクトからデータを取得する際の終了位置を指定します、デフォルト値はコピー元オブジェクトの長さです

サンプルコードは以下の通りです。

Buffer.concat([str1,str2]).toString()
ログイン後にコピー


Bufferクラスのメソッド

(1) isBufferメソッド


は、オブジェクトがBufferオブジェクトであるかどうかを判定するために使用されます。 使用方法は次のとおりです。


サンプルコードは以下の通りです:

//在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))
ログイン後にコピー

Console

(2) byteLengthメソッド

ByteLengthメソッドを使用して、指定された文字列のバイト数を計算できます。 使用方法は次のとおりです。

buf.copy(targetBuffer,[targetStart],[sourceStart],[sourceEnd])
ログイン後にコピー


必須パラメータ 1: バイト数を計算する必要がある文字列を指定します

オプションのパラメータ 2: エンコード形式、デフォルトは utf8

サンプルコードは次のとおりです:

りりー

(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))
ログイン後にコピー

   



関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!