ホームページ >ウェブフロントエンド >jsチュートリアル >NodeJSのBufferとは何かと使用例を詳しく解説
いわゆるバッファ バッファとは「一時記憶領域」を意味し、入出力データを一時的に保存するメモリのセクションです。
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>
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 ストリームやファイルシステムを扱う場合には、オクテットストリームの処理が必要になります。
(4)、元のデータは Buffer インスタンスに保存されます。Buffer は整数配列に似ていますが、そのメモリは V8 スタックの外部に割り当てられます。バッファのサイズは変更できません。
(5)、処理されるエンコーディング タイプは、ascii、utf8、utf16le、ucs2 (utf16le のエイリアス)、base64、バイナリ、16 進数です。
(6)、Buffer はグローバル要素であり、new Buffer() を使用して Buffer インスタンスを直接取得できます。
以上がNodeJSのBufferとは何かと使用例を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。