ホームページ >ウェブフロントエンド >jsチュートリアル >NodeJSのBufferとは何かと使用例を詳しく解説

NodeJSのBufferとは何かと使用例を詳しく解説

伊谢尔伦
伊谢尔伦オリジナル
2017-07-24 10:56:252716ブラウズ

いわゆるバッファ バッファとは「一時記憶領域」を意味し、入出力データを一時的に保存するメモリのセクションです。

JS 言語自体には文字列データ型のみがあり、バイナリ データ型はありません。そのため、NodeJS はバイナリ データに対する操作を提供する String と同等のグローバル コンストラクター Buffer を提供します。ファイルを読み取って Buffer のインスタンスを取得するだけでなく、次のように直接構築することもできます。

 var buffer = new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;

Buffer は文字列に似ており、.length 属性を使用してバイト長を取得することもできます。 [index] を使用して指定された位置を読み取ります。例:

buffer[0] ; // 0x68;

バッファと文字列を相互に変換できます。たとえば、指定したエンコーディングを使用してバイナリ データを文字列に変換できます:

var str = buffer.toString("utf-8");  // hello

Convert a指定されたエンコーディングの下で​​文字列をバイナリ データに変換します:

var buffer= new Buffer("hello", "utf-8") ; // <Buffer 68 65 6c 6c 6f>

ちょっとした違い:

Buffer と string の間には重要な違いがあります。文字列は読み取り専用であり、文字列を変更すると新しい文字列が作成されますが、元の文字列は変更されません。

バッファに関しては、ポインタ操作を実行できる C 言語の配列に似ています。たとえば、[index] メソッドを使用して、特定の位置のバイトを直接変更できます。

slice メソッドは新しいバッファーを返しませんが、以下に示すように、元のバッファーの中央の位置へのポインターを返すのと似ています。

[ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]

 var buffer= new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
 var sub = bin.slice(2) ;
 sub[0] = 0x65 ;
 console.log(buffer) ; //  <Buffer 68 65 65 6c 6f>

バッファをコピーするには、まず新しいバッファを作成し、.copy メソッドを使用して元のバッファのデータをコピーする必要があります。

これは、新しいメモリを申請し、既存のメモリ内のデータをコピーすることに似ています。以下に例を示します。

var buffer= new Buffer([ 0x68, 0x65, 0x6c, 0x6c, 0x6f ]) ;
 var dup = new Buffer(bin.length) ;
 buffer.copy(dup) ;
 dup[0] = 0x48 ;
 console.log(buffer) ;  // <Buffer 68 65 6c 6c 6f>
 console.log(dup) ;  // <Buffer 48 65 65 6c 6f>

つまり、Buffer は JS のデータ処理機能を文字列から任意のバイナリ データまで拡張します。

要約すると

(1)、JavaScriptはUnicodeでエンコードされたデータの処理には適していますが、バイナリデータの処理には適していません。
(2) なので、TCP ストリームやファイルシステムを扱う場合には、オクテットストリームの処理が必要になります。

(3)、ノードには、オクテット ストリームを処理、作成、消費するためのメソッドがいくつかあります。

(4)、元のデータは Buffer インスタンスに保存されます。Buffer は整数配列に似ていますが、そのメモリは V8 スタックの外部に割り当てられます。バッファのサイズは変更できません。
(5)、処理されるエンコーディング タイプは、ascii、utf8、utf16le、ucs2 (utf16le のエイリアス)、base64、バイナリ、16 進数です。
(6)、Buffer はグローバル要素であり、new Buffer() を使用して Buffer インスタンスを直接取得できます。

以上がNodeJSのBufferとは何かと使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。