Node.js-バッファ

純粋なJavaScriptはUnicodeに対応していますが、バイナリデータには適していません。TCPストリームまたはファイルシステムを処理するときは、オクテットストリームを処理する必要があります。ノードは、整数の配列と同様の生データを格納するためのインスタンスを提供するBufferクラスを提供しますが、V8ヒープ外の生メモリ割り当てに対応します。

バッファクラスは、バッファモジュールをインポートせずにアプリケーションでアクセスできるグローバルクラスです。

バッファの作成

ノードバッファはさまざまな方法で構築できます。

方法1

以下は、の未開始のバッファを作成するための構文です。 10 オクテット-

var buf = new Buffer(10);

方法2

以下は、指定された配列からバッファーを作成するための構文です。

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

方法3

以下は、指定された文字列とオプションでエンコードタイプ-からバッファを作成するための構文です。

var buf = new Buffer("Simply Easy Learning", "utf-8");

「utf8」がデフォルトのエンコーディングですが、「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("Simply Easy Learning");

console.log("Octets written : "+  len);

上記のプログラムを実行すると、次の結果が得られます。

Octets written : 20

バッファからの読み取り

構文

以下は、ノードバッファからデータを読み取るメソッドの構文です。

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

パラメーター

使用されるパラメータの説明は次のとおりです-

  • encoding−使用するエンコーディング。「utf8」がデフォルトのエンコーディングです。

  • start −読み取りを開始するための開始インデックス。デフォルトは0です。

  • end −インデックスを終了して読み取りを終了します。デフォルトは完全なバッファです。

戻り値

このメソッドは、指定された文字セットエンコーディングを使用してエンコードされたバッファデータから文字列をデコードして返します。

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

console.log( buf.toString('ascii'));       // outputs: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5));   // outputs: abcde
console.log( buf.toString('utf8',0,5));    // outputs: abcde
console.log( buf.toString(undefined,0,5)); // encoding defaults to 'utf8', outputs abcde

上記のプログラムを実行すると、次の結果が得られます。

abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde

バッファをJSONに変換する

構文

以下は、ノードバッファをJSONオブジェクトに変換するメソッドの構文です-

buf.toJSON()

戻り値

このメソッドは、BufferインスタンスのJSON表現を返します。

var buf = new Buffer('Simply Easy Learning');
var json = buf.toJSON(buf);

console.log(json);

上記のプログラムを実行すると、次の結果が得られます。

{ type: 'Buffer',
   data: 
   [ 
      83,
      105,
      109,
      112,
      108,
      121,
      32,
      69,
      97,
      115,
      121,
      32,
      76,
      101,
      97,
      114,
      110,
      105,
      110,
      103 
   ]
}

バッファの連結

構文

以下は、ノードバッファを単一のノードバッファに連結するメソッドの構文です。

Buffer.concat(list[, totalLength])

パラメーター

使用されるパラメータの説明は次のとおりです-

  • list −連結するバッファオブジェクトの配列リスト。

  • totalLength −これは連結されたときのバッファの全長です。

戻り値

このメソッドはBufferインスタンスを返します。

var buffer1 = new Buffer('TutorialsPoint ');
var buffer2 = new Buffer('Simply Easy Learning');
var buffer3 = Buffer.concat([buffer1,buffer2]);

console.log("buffer3 content: " + buffer3.toString());

上記のプログラムを実行すると、次の結果が得られます。

buffer3 content: TutorialsPoint Simply Easy Learning

バッファを比較する

構文

以下は、2つのノードバッファを比較するメソッドの構文です。

buf.compare(otherBuffer);

パラメーター

使用されるパラメータの説明は次のとおりです-

  • otherBuffer −これはと比較されるもう1つのバッファです buf

戻り値

ソート順で、otherBufferの前か後か、またはotherBufferと同じかを示す数値を返します。

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

if(result < 0) {
   console.log(buffer1 +" comes before " + buffer2);
} else if(result === 0) {
   console.log(buffer1 +" is same as " + buffer2);
} else {
   console.log(buffer1 +" comes after " + buffer2);
}

上記のプログラムを実行すると、次の結果が得られます。

ABC comes before ABCD

コピーバッファ

構文

以下は、ノードバッファをコピーするメソッドの構文です-

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

パラメーター

使用されるパラメータの説明は次のとおりです-

  • targetBuffer −バッファがコピーされるバッファオブジェクト。

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

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

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

戻り値

戻り値はありません。ターゲットメモリ領域がソースとオーバーラップしている場合でも、このバッファの領域からターゲットバッファ内の領域にデータをコピーします。未定義の場合、targetStartパラメーターとsourceStartパラメーターのデフォルトは0で、sourceEndのデフォルトはbuffer.lengthです。

var buffer1 = new Buffer('ABC');

//copy a buffer
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());

上記のプログラムを実行すると、次の結果が得られます。

buffer2 content: ABC

スライスバッファー

構文

以下は、ノードバッファのサブバッファを取得するメソッドの構文です。

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

パラメーター

使用されるパラメータの説明は次のとおりです-

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

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

戻り値

古いバッファと同じメモリを参照するが、開始(デフォルトは0)および終了(デフォルトはbuffer.length)インデックスによってオフセットおよびトリミングされた新しいバッファを返します。負のインデックスは、バッファの終わりから始まります。

var buffer1 = new Buffer('TutorialsPoint');

//slicing a buffer
var buffer2 = buffer1.slice(0,9);
console.log("buffer2 content: " + buffer2.toString());

上記のプログラムを実行すると、次の結果が得られます。

buffer2 content: Tutorials

バッファ長

構文

以下は、ノードバッファのサイズをバイト単位で取得するメソッドの構文です。

buf.length;

戻り値

バッファのサイズをバイト単位で返します。

var buffer = new Buffer('TutorialsPoint');

//length of the buffer
console.log("buffer length: " + buffer.length);

上記のプログラムを実行すると、次の結果が得られます-

buffer length: 14

メソッドリファレンス

シニア番号 方法と説明
1

new Buffer(size)

サイズオクテットの新しいバッファを割り当てます。サイズはkMaxLength以下でなければならないことに注意してください。それ以外の場合、RangeErrorがここにスローされます。

2

new Buffer(buffer)

渡されたバッファデータを新しいバッファインスタンスにコピーします。

3

new Buffer(str[, encoding])

指定されたstrを含む新しいバッファを割り当てます。エンコーディングのデフォルトは「utf8」です。

4

buf.length

バッファのサイズをバイト単位で返します。これは必ずしもコンテンツのサイズではないことに注意してください。長さは、バッファオブジェクトに割り当てられたメモリの量を指します。バッファの内容が変更されても変更されません。

5

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

指定されたエンコーディングを使用して、オフセットでバッファに文字列を書き込みます。オフセットのデフォルトは0、エンコーディングのデフォルトは「utf8」です。lengthは、書き込むバイト数です。書き込まれたオクテットの数を返します。

6

buf.writeUIntLE(value, offset, byteLength[, noAssert])

指定されたオフセットとbyteLengthでバッファに値を書き込みます。最大48ビットの精度をサポートします。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。デフォルトはfalseです。

7

buf.writeUIntBE(value, offset, byteLength[, noAssert])

指定されたオフセットとbyteLengthでバッファに値を書き込みます。最大48ビットの精度をサポートします。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。デフォルトはfalseです。

8

buf.writeIntLE(value, offset, byteLength[, noAssert])

指定されたオフセットとbyteLengthでバッファに値を書き込みます。最大48ビットの精度をサポートします。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。デフォルトはfalseです。

9

buf.writeIntBE(value, offset, byteLength[, noAssert])

指定されたオフセットとbyteLengthでバッファに値を書き込みます。最大48ビットの精度をサポートします。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。デフォルトはfalseです。

10

buf.readUIntLE(offset, byteLength[, noAssert])

すべての数値読み取りメソッドの一般化されたバージョン。最大48ビットの精度をサポートします。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

11

buf.readUIntBE(offset, byteLength[, noAssert])

すべての数値読み取りメソッドの一般化されたバージョン。最大48ビットの精度をサポートします。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

12

buf.readIntLE(offset, byteLength[, noAssert])

すべての数値読み取りメソッドの一般化されたバージョン。最大48ビットの精度をサポートします。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

13

buf.readIntBE(offset, byteLength[, noAssert])

すべての数値読み取りメソッドの一般化されたバージョン。最大48ビットの精度をサポートします。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

14

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

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

15

buf.toJSON()

BufferインスタンスのJSON表現を返します。JSON.stringifyは、Bufferインスタンスを文字列化するときに、この関数を暗黙的に呼び出します。

16

buf[index]

オクテットを取得してインデックスに設定します。値は個々のバイトを参照するため、有効な範囲は0x00〜0xFF hexまたは0〜255です。

17

buf.equals(otherBuffer)

このバッファとotherBufferのバイト数が同じ場合は、ブール値を返します。

18

buf.compare(otherBuffer)

このバッファがソート順でotherBufferの前か後か、または同じかどうかを示す数値を返します。

19

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

ターゲットメモリ領域がソースとオーバーラップしている場合でも、このバッファの領域からターゲットバッファ内の領域にデータをコピーします。未定義の場合、targetStartパラメーターとsourceStartパラメーターのデフォルトは0で、sourceEndのデフォルトはbuffer.lengthです。

20

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

古いものと同じメモリを参照するが、開始(デフォルトは0)および終了(デフォルトはbuffer.length)インデックスによってオフセットおよびトリミングされた新しいバッファを返します。負のインデックスは、バッファの終わりから始まります。

21

buf.readUInt8(offset[, noAssert])

指定されたオフセットでバッファから符号なし8ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

22

buf.readUInt16LE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから符号なし16ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

23

buf.readUInt16BE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから符号なし16ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

24

buf.readUInt32LE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから符号なし32ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

25

buf.readUInt32BE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから符号なし32ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

26

buf.readInt8(offset[, noAssert])

指定されたオフセットでバッファから符号付き8ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

27

buf.readInt16LE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから符号付き16ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

28

buf.readInt16BE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから符号付き16ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

29

buf.readInt32LE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから符号付き32ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

30

buf.readInt32BE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから符号付き32ビット整数を読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

31

buf.readFloatLE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから32ビットフロートを読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

32

buf.readFloatBE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから32ビットフロートを読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

33

buf.readDoubleLE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから64ビットのdoubleを読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

34

buf.readDoubleBE(offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファから64ビットのdoubleを読み取ります。オフセットの検証をスキップするには、noAssertをtrueに設定します。これは、オフセットがバッファの終わりを超えている可能性があることを意味します。デフォルトはfalseです。

35

buf.writeUInt8(value, offset[, noAssert])

指定されたオフセットでバッファに値を書き込みます。値は有効な符号なし8ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎ、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

36

buf.writeUInt16LE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号なし16ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確実でない限り、使用しないでください。デフォルトはfalseです。

37

buf.writeUInt16BE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号なし16ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

38

buf.writeUInt32LE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号なし32ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

39

buf.writeUInt32BE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号なし32ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

40

buf.writeInt8(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号付き8ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

41

buf.writeInt16LE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号付き16ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

42

buf.writeInt16BE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号付き16ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎ、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

43

buf.writeInt32LE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号付き32ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

44

buf.writeInt32BE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な符号付き32ビット整数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確実でない限り、使用しないでください。デフォルトはfalseです。

45

buf.writeFloatLE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な32ビットfloatでなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

46

buf.writeFloatBE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な32ビット浮動小数点数でなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

47

buf.writeDoubleLE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な64ビットdoubleでなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎ、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

48

buf.writeDoubleBE(value, offset[, noAssert])

指定されたエンディアン形式で、指定されたオフセットでバッファに値を書き込みます。値は有効な64ビットdoubleでなければならないことに注意してください。値とオフセットの検証をスキップするには、noAssertをtrueに設定します。これは、値が特定の関数に対して大きすぎる可能性があり、オフセットがバッファーの終わりを超えて、値がサイレントにドロップされる可能性があることを意味します。正確性が確認できない限り、使用しないでください。デフォルトはfalseです。

49

buf.fill(value[, offset][, end])

指定された値でバッファを満たします。オフセット(デフォルトは0)と終了(デフォルトはbuffer.length)が指定されていない場合、バッファー全体がいっぱいになります。

クラスメソッド

シニア番号 方法と説明
1

Buffer.isEncoding(encoding)

エンコーディングが有効なエンコーディング引数である場合はtrueを返し、そうでない場合はfalseを返します。

2

Buffer.isBuffer(obj)

objがバッファであるかどうかをテストします。

3

Buffer.byteLength(string[, encoding])

文字列の実際のバイト長を示します。エンコーディングのデフォルトは「utf8」です。String.prototype.lengthは文字列の文字数を返すため、String.prototype.lengthと同じではありません。

4

Buffer.concat(list[, totalLength])

リスト内のすべてのバッファーを連結した結果であるバッファーを返します。

5

Buffer.compare(buf1, buf2)

buf1.compare(buf2)と同じです。バッファの配列をソートするのに便利です。