はじめに
Node.js では、バイナリ データを格納するためのバッファー領域を作成するために使用される Buffer クラスが定義されています。この記事では、node.js の Buffer クラスがバイナリ データを処理する方法を詳しく紹介します。早速、その詳細を見てみましょう。
バッファオブジェクトを作成する
最初の方法: 配列を直接使用してバッファ領域を初期化します
var arr = [0,1,2] var buf = new Buffer(arr) console.log(buf)
実行効果:
2番目の方法: 文字列を直接使用してバッファ領域を初期化します
var str = 'hello' var buf = new Buffer(str) console.log(buf)
実行効果:
Node.js では、文字列の入出力のエンコードとデコードが自動的に実行され、デフォルトで UTF8 エンコードが使用されます。
Bufferオブジェクトと文字列オブジェクトの変換
(1) toString
Bufferオブジェクトに保存されているデータを文字列に変換するには、BufferオブジェクトのtoStringメソッドを使用します。
buf.toString([encoding],[start],[end])
オプションのパラメータ 1: Buffer オブジェクトに保存されるテキストのエンコード形式を指定するために使用されます。デフォルトのパラメータは UTF8 です。
var buf = new Buffer('阁下何不随风起') console.log(buf) console.log(buf.toString('utf8',9,12)) console.log(buf.toString('utf8',12,buf.length))
buf.write(string,[offset],[length],[encodign])
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 オブジェクトを指定することができます。このメソッドは変換された文字列を返します。コードは次のとおりです。
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 オブジェクトにデータを書き込むバイトを指定します
オプションパラメータ4:コピー元バッファオブジェクトからデータを取得する際の終了位置を指定します、デフォルト値はコピー元オブジェクトの長さです
サンプルコードは以下の通りです。
Buffer.concat([str1,str2]).toString()
(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))