Node.jsバッファ


JavaScript 言語自体には文字列データ型のみがあり、バイナリデータ型はありません。

ただし、TCP やファイル ストリームなどのストリームを処理する場合は、バイナリ データを使用する必要があります。そのため、Node.js では、バイナリ データを格納するための専用のバッファ領域を作成するために使用される Buffer クラスが定義されています。

Node.js では、Buffer クラスは Node カーネルとともにリリースされるコア ライブラリです。バッファ ライブラリは、生データを Node.js に保存する方法を提供し、Node.js での I/O 操作中に移動されたデータを処理する必要があるときはいつでも、Node.js でバッファ ライブラリを使用できるようにします。 。生データは Buffer クラスのインスタンスに保存されます。バッファは整数配列に似ていますが、V8 ヒープ メモリの外側にある生のメモリの一部に対応します。


Buffer クラスの作成

Node Buffer クラスはさまざまな方法で作成できます。

方法 1

長さ 10 バイトの Buffer インスタンスを作成する:

var buf = new Buffer(10);

方法 2

指定された配列から Buffer インスタンスを作成する:

var buf = new Buffer([10, 20, 30, 40, 50]);

方法 3

文字列から Buffer インスタンスを作成する:

var buf = new Buffer("www.php.cn", "utf-8");

utf-8 はデフォルトのエンコードで、「ascii」、「utf8」、「utf16le」、「ucs2」、「base64」、「hex」のエンコードもサポートしています。


バッファの書き込み

構文

ノード バッファを書き込むための構文は次のとおりです:

buf.write(string[, offset[, length]][, encoding])

パラメータ

パラメータは次のように説明されます:

  • string - バッファに書き込む文字列。

  • offset - バッファへの書き込みが開始されるインデックス値、デフォルトは 0 です。

  • length - 書き込まれたバイト数、デフォルトはbuffer.length

  • encoding - 使用されるエンコーディング。デフォルトは 'utf8' です。

戻り値

実際に書き込まれたサイズを返します。バッファスペースが不十分な場合は、文字列の一部のみが書き込まれます。

インスタンス

buf = new Buffer(256);
len = buf.write("www.php.cn");

console.log("写入字节数 : "+  len);

上記のコードを実行すると、出力結果は次のようになります:

$node main.js
写入字节数 : 14

バッファからデータを読み取ります

構文

ノードバッファデータを読み取るための構文は次のとおりです:

buf.toString([encoding[, start[, end]]])

パラメータ

パラメータは次のとおりです:次のように説明します:

  • encoding - 使用されるエンコーディング。デフォルトは 'utf8' です。

  • start - 読み取りを開始するインデックス位置を指定します。デフォルトは 0 です。

  • end - 終了位置、デフォルトはバッファの末尾です。

戻り値

バッファデータをデコードし、指定されたエンコーディングを使用して文字列を返します。

Instance

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
  buf[i] = i + 97;
}

console.log( buf.toString('ascii'));       // 输出: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5));   // 输出: abcde
console.log( buf.toString('utf8',0,5));    // 输出: abcde
console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 编码, 并输出: abcde

上記のコードを実行すると、出力結果は次のようになります:

$ node main.js
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde

バッファをJSONオブジェクトに変換します

構文

ノードバッファをJSONオブジェクトに変換するための関数の構文形式は次のとおりです:

buf.toJSON()

戻り値

JSON オブジェクトを返します。

インスタンス

var buf = new Buffer('www.php.cn');
var json = buf.toJSON(buf);

console.log(json);

上記のコードを実行すると、出力結果は次のようになります:

[ 119, 119, 119, 46, 114, 117, 110, 111, 111, 98, 46, 99, 111, 109 ]

バッファマージ

構文

ノード バッファマージの構文は次のとおりです:

Buffer.concat(list[, totalLength])

パラメータ

パラメータは次のように説明されます:

  • list - マージ用の Buffer オブジェクトの配列リスト。

  • totalLength - マージされた Buffer オブジェクトの合計の長さを指定します。

戻り値

複数のメンバーを結合した新しい Buffer オブジェクトを返します。

var buffer1 = new Buffer('php中文网 ');
var buffer2 = new Buffer('www.php.cn');
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 内容: " + buffer3.toString());

上記のコードを実行すると、出力結果は次のようになります:

buffer3 内容: php中文网 www.php.cn

バッファ比較

構文

ノードバッファ比較の関数構文は次のとおりです。このメソッドはNode.js v0.12.2バージョンで導入されました。 :

buf.compare(otherBuffer);

Parameters

パラメータは次のように記述されます:

  • otherBuffer - buf オブジェクトと比較される別の Buffer オブジェクト。

戻り値

bufotherBufferの前、後、または同じであることを示す数値を返します。

var buffer1 = new Buffer('ABC');
var buffer2 = new Buffer('ABCD');
var result = buffer1.compare(buffer2);

if(result < 0) {
   console.log(buffer1 + " 在 " + buffer2 + "之前");
}else if(result == 0){
   console.log(buffer1 + " 与 " + buffer2 + "相同");
}else {
   console.log(buffer1 + " 在 " + buffer2 + "之后");
}

上記のコードを実行すると、出力結果は次のようになります:

ABC在ABCD之前

バッファのコピー

構文

ノード バッファコピーの構文は次のとおりです:

buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])

パラメータ

パラメータは次のように説明されます:

  • targetBuffer - コピーされる Buffer オブジェクト。

  • targetStart - 数値、オプション、デフォルト: 0

  • sourceStart - 数値、オプション、デフォルト: 0

  • sourceEnd - 数値、オプション、デフォルト:buffer.length

戻り値

戻り値はありません。

インスタンス

var buffer1 = new Buffer('ABC');
// 拷贝一个缓冲区
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

上記のコードを実行すると、出力結果は次のようになります:

buffer2 content: ABC

バッファクリッピング

ノードバッファクリッピングの構文は次のとおりです:

buf.slice([start[, end]])

パラメータ

    パラメータは次のように説明されます:
  • スタート

    - 数値、オプション、デフォルト: 0

  • end

    - 数値、オプション、デフォルト:buffer.length

  • 戻り値

古いバッファと同じメモリを指す新しいバッファを返します。ただし、インデックスの最初から最後までカットされます。

var buffer1 = new Buffer('php');
// 剪切缓冲区
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString());

上記のコードを実行すると、出力結果は次のようになります:

buffer2 content: ru

バッファ長

構文

ノードバッファ長の計算構文は次のとおりです:

buf.length;

戻り値

バッファによって占有されているメモリを返しますオブジェクトの長さ。

var buffer = new Buffer('www.php.cn');
//  缓冲区长度
console.log("buffer length: " + buffer.length);

上記のコードを実行すると、出力結果は次のようになります:

buffer length: 14

メソッドリファレンスマニュアル

以下は、Node.jsバッファモジュールで一般的に使用されるメソッドのリストです(一部のメソッドはNode.jsバッファモジュールでは使用できないことに注意してください)古いバージョン):

67891011
シリアル番号メソッドと説明
1新しいバッファ(サイズ)
新しいサイズのバッファを8ビットバイトで割り当てます。 サイズは kMaxLength 未満である必要があることに注意してください。そうでない場合は、RangeError 例外がスローされます。
2new Buffer(buffer)
パラメータbufferのデータをBufferインスタンスにコピーします。
3new Buffer(str[, encoding])
受信した str 文字列を含む新しいバッファを割り当てます。エンコードエンコードのデフォルトは「utf8」です。
4buf.length
このバッファのバイト数を返します。これは必ずしもバッファの内容のサイズではないことに注意してください。 length はバッファ オブジェクトによって割り当てられるメモリの量であり、バッファ オブジェクトの内容が変化しても変化しません。
5buf.write(string[, offset[, length]][, encoding])
パラメータのオフセット offset と指定されたエンコーディング encode 方式に従って、パラメータ文字列データをバッファに書き込みます。オフセットのデフォルト値は 0 で、デフォルトのエンコード方式は utf8 です。 length は書き込まれる文字列のバイト単位のサイズです。 書き込まれた 8 ビット バイト ストリームの数を示す数値型を返します。バッファーに文字列全体を保持するのに十分なスペースがない場合は、文字列の一部のみが書き込まれます。長さのデフォルトは、buffer.length - オフセットです。 このメソッドでは部分的な文字は書き込まれません。
buf.writeUIntLE(value, offset, byteLength[, noAssert]) 値をバッファに書き込みます。これは、offset と byteLength によって決定され、48 ビットの計算をサポートします。例:
var b = new Buffer(6);
b.writeUIntBE(0x1234567890ab, 0, 6);
// <Buffer 12 34 56 78 90 ab>
noAssert。 value が true の場合、value と offset の有効性は検証されなくなります。 デフォルトは false です。
buf.writeUIntBE(value, offset, byteLength[, noAssert]) バッファに値を書き込みます。これはオフセットと byteLength によって決定され、48 ビットの計算をサポートします。 noAssert 値が true の場合、値とオフセットの有効性は検証されません。 デフォルトは false です。
buf.writeIntLE(value, offset, byteLength[, noAssert]) バッファに値を書き込みます。これはオフセットと byteLength によって決定され、48 ビットの計算をサポートします。 noAssert 値が true の場合、値とオフセットの有効性は検証されません。 デフォルトは false です。
buf.writeIntBE(value, offset, byteLength[, noAssert]) バッファに値を書き込みます。これはオフセットと byteLength によって決定され、48 ビットの計算をサポートします。 noAssert 値が true の場合、値とオフセットの有効性は検証されなくなります。 デフォルトは false です。
buf.readUIntLE(offset, byteLength[, noAssert])は、48 桁未満の数値の読み取りをサポートしています。 noAssert 値が true の場合、offset はバッファの長さを超えているかどうかを検証しなくなります。デフォルトは false です。
buf.readUIntBE(offset, byteLength[, noAssert])48 桁未満の数値の読み取りをサポートします。 noAssert 値が true の場合、offset はバッファの長さを超えているかどうかを検証しなくなります。デフォルトは false です。
12buf.readIntLE(offset, byteLength[, noAssert])
は、48 桁未満の数値の読み取りをサポートしています。 noAssert 値が true の場合、offset はバッファの長さを超えているかどうかを検証しなくなります。デフォルトは false です。
13buf.readIntBE(offset, byteLength[, noAssert])
は、48 桁未満の数値の読み取りをサポートしています。 noAssert 値が true の場合、offset はバッファの長さを超えているかどうかを検証しなくなります。デフォルトは false です。
14buf.toString([encoding[, start[, end]]])
エンコーディングパラメータに従ってデコードされた文字列タイプを返します (デフォルトは 'utf8')。また、渡されたパラメータ start (デフォルトは 0) と end (デフォルトはbuffer.length) を値の範囲として使用します。
15buf.toJSON()
Buffer インスタンスを JSON オブジェクトに変換します。
16buf[index]
指定されたバイトを取得または設定します。戻り値はバイトを表すため、戻り値の有効範囲は 16 進数で 0x00 ~ 0xFF、10 進数で 0 ~ 255 です。
17buf.equals(otherBuffer)
2 つのバッファーが等しいかどうかを比較し、等しい場合は true を返し、そうでない場合は false を返します。
18buf.compare(otherBuffer)
2 つの Buffer オブジェクトを比較し、buf が otherBuffer より前、後、または同じであることを示す数値を返します。
19buf.copy(targetBuffer[, targetStart[,sourceStart[,sourceEnd]]])
バッファのコピー、ソースとターゲットは同じにすることができます。 targetStart ターゲット開始オフセットとsourceStart ソース開始オフセットは両方ともデフォルトで 0 です。 sourceEnd ソース終了位置のオフセットのデフォルトは、ソースbuffer.length の長さです。
20buf.slice([start[, end]])
Buffer オブジェクトを切り取り、start (デフォルトは 0) と end (デフォルトはbuffer.length) に従ってインデックスをオフセットしてトリミングします。 負のインデックスはバッファの最後から計算されます。
21buf.readUInt8(offset[, noAssert])
指定されたオフセットに基づいて符号付き 8 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 この場合、オフセットはバッファの終わりを超えて拡張される可能性があります。デフォルトは false です。
22buf.readUInt16LE(offset[, noAssert])
指定されたオフセットに基づく特別なエンディアン バイト オーダー形式を使用して、符号付き 16 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
23buf.readUInt16BE(offset[, noAssert])
指定されたオフセットで特別なエンディアン バイト オーダー形式を使用して、符号付き 16 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
24buf.readUInt32LE(offset[, noAssert])
指定されたオフセットに基づいて、指定されたエンディアンのバイトオーダー形式を使用して、符号付き 32 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
25buf.readUInt32BE(offset[, noAssert])
指定されたオフセットに基づいて、指定されたエンディアンのバイトオーダー形式を使用して、符号付き 32 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
26buf.readInt8(offset[, noAssert])
指定されたオフセットに基づいて符号付き 8 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
27buf.readInt16LE(offset[, noAssert])
指定されたオフセットに基づく特別なエンディアン形式を使用して、符号付き 16 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
28buf.readInt16BE(offset[, noAssert])
指定されたオフセットに基づく特別なエンディアン形式を使用して、符号付き 16 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
29buf.readInt32LE(offset[, noAssert])
指定されたオフセットに基づいて、指定されたエンディアンのバイトオーダー形式を使用して、符号付き 32 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
30buf.readInt32BE(offset[, noAssert])
指定されたオフセットに基づいて、指定されたエンディアンのバイトオーダー形式を使用して、符号付き 32 ビット整数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
31buf.readFloatLE(offset[, noAssert])
指定されたオフセットに基づいて、指定されたエンディアンのバイトオーダー形式を使用して 32 ビット浮動小数点数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
32buf.readFloatBE(offset[, noAssert])
指定されたエンディアンのバイトオーダー形式を使用して、指定されたオフセットで 32 ビット浮動小数点数を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
33buf.readDoubleLE(offset[, noAssert])
指定されたオフセットに基づいて、指定されたエンディアン バイト オーダー形式を使用して 64 ビット double を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
34buf.readDoubleBE(offset[, noAssert])
指定されたオフセットに基づいて、指定されたエンディアン バイト オーダー形式を使用して 64 ビット double を読み取ります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、オフセットがバッファの終わりを超えて拡張される可能性があることを意味します。デフォルトは false です。
35buf.writeUInt8(value, offset[, noAssert])
渡されたオフセット offset に従って値をバッファに書き込みます。注: 値は、正当な符号付き 8 ビット整数である必要があります。 noAssert パラメータが true の場合、offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータに十分な自信がない限り、これを使用しないでください。デフォルトは false です。
36buf.writeUInt16LE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、バッファに value を書き込みます。注: 値は、正当な符号付き 16 ビット整数である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
37buf.writeUInt16BE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、バッファに value を書き込みます。注: 値は、正当な符号付き 16 ビット整数である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
38buf.writeUInt32LE(値, オフセット[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、バッファに値を書き込みます。注: 値は、有効な符号付き 32 ビット整数である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
39buf.writeUInt32BE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、バッファに value を書き込みます。注: 値は、有効な符号付き 32 ビット整数である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
40buf.writeInt8(value, offset[, noAssert])<br 受信した offset="" offset=""buffer= "" に従って Write="" value="" を書き込みます。注: value="" は、legal="" signed="" 8="" 桁の整数である必要があります。 ="" パラメータ="" noassert="" が ="" true="" の場合、オフセット パラメータ ="" および ="" は検証されません。 ="" これは、="" が大きすぎる可能性がある、または ="" が ="" の末尾を超えて ="" が破棄される可能性があることを意味します。 ="" このパラメータについてよくわからない場合は、使用しないでください。デフォルトは「" false」です。 <="" td="">
41buf.writeInt16LE(value, offset[, noAssert])
受信オフセット offset と指定されたエンディアン形式に従って値をバッファに書き込みます。注: 値は有効な符号付き 16 ビット整数である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
42buf.writeInt16BE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、バッファに value を書き込みます。注: 値は有効な符号付き 16 ビット整数である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
43buf.writeInt32LE(値, オフセット[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に基づいて、バッファに値を書き込みます。注: 値は有効な符号付き 32 ビット整数である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
44buf.writeInt32BE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、バッファに value を書き込みます。注: 値は有効な符号付き 32 ビット整数である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
45buf.writeFloatLE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、値をバッファーに書き込みます。注: value が 32 ビット浮動小数点値でない場合、結果は不定になります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
46buf.writeFloatBE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、値をバッファーに書き込みます。注: value が 32 ビット浮動小数点値でない場合、結果は不定になります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
47buf.writeDoubleLE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に従って、バッファに値を書き込みます。注: value は有効な 64 ビット double 値である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
48buf.writeDoubleBE(value, offset[, noAssert])
渡されたオフセット offset と指定されたエンディアン形式に基づいて、バッファに値を書き込みます。注: value は有効な 64 ビット double 値である必要があります。 noAssert パラメータが true の場合、value および offset offset パラメータは検証されません。 これは、値が大きすぎるか、オフセットがバッファの末尾を超えて値が破棄される可能性があることを意味します。 このパラメータについてよくわからない場合は、使用しないでください。デフォルトは false です。
49buf.fill(value[, offset][, end])
指定された値を使用してこのバッファーを埋めます。 offset (デフォルトは 0) と end (デフォルトはbuffer.length) が指定されていない場合、バッファ全体が埋められます。