情報アイランド

「情報を制する者は世界を制す」をモットーに様々な情報を提供することを目指すブログです。現在はプログラミング関連情報が多めですが、投資関連情報も取り扱っていきたいです。

Node.jsでバッファを検索する

存在確認

バッファにデータが含まれているかチェックするにはbuf.includes関数を使用します。

var includes = buf.includes(0, 0);
var includes = buf.includes('xxx', 0, 'utf-8');
var includes = buf.includes(buf, 0);

第1引数にデータを指定します。バイトか文字列かバッファを指定します。

第2引数に検索の開始インデックスを指定します。この引数は指定しなくても構いません。デフォルトは0です。

第3引数に文字コードを指定します。この引数は指定しなくても構いません。デフォルトはutf-8です。データが文字列でない場合には無視されます。

バッファが対応している文字コードに関しては下の記事の「文字コード」の項を参照してください。

返り値としてバッファにデータが含まれているかが真偽値として得られます。

冒頭からの検索

バッファの中で最初にデータが含まれている位置を検索するにはbuf.indexOf関数を使用します。

var index = buf.indexOf(0, 0);
var index = buf.indexOf('xxx', 0, 'utf-8');
var index = buf.indexOf(buf, 0);

第1引数にデータを指定します。バイトか文字列かバッファを指定します。

第2引数に検索の開始インデックスを指定します。この引数は指定しなくても構いません。デフォルトは0です。

第3引数に文字コードを指定します。この引数は指定しなくても構いません。デフォルトはutf-8です。データが文字列でない場合には無視されます。

返り値としてバッファの中で最初にデータが含まれているインデックスが得られます。

ただし、バッファの中にデータが含まれていない場合には-1が返ります。

末尾からの検索

バッファの中で最後にデータが含まれている位置を検索するにはbuf.lastIndexOf関数を使用します。

var index = buf.lastIndexOf(0, buf.length);
var index = buf.lastIndexOf('xxx', buf.length, 'utf-8');
var index = buf.lastIndexOf(buf, buf.length);

第1引数にデータを指定します。バイトか文字列かバッファを指定します。

第2引数に検索の開始インデックスを指定します。この引数は指定しなくても構いません。デフォルトはバッファの長さです。検索はバッファの末尾から先頭に向かって行われることに注意してください。

第3引数に文字コードを指定します。この引数は指定しなくても構いません。デフォルトはutf-8です。データが文字列でない場合には無視されます。

返り値としてバッファの中で最後にデータが含まれているインデックスが得られます。

ただし、バッファの中にデータが含まれていない場合には-1が返ります。

サンプルコード1

buffer-index.js

var buf1 = Buffer.from([0, 1, 2, 3]);
var buf2 = Buffer.from([0, 1, 1, 1]);
var buf3 = Buffer.from([3, 2, 1, 0]);

console.log(buf1.includes(1));
console.log(buf2.includes(1));
console.log(buf3.includes(1));
console.log(buf1.includes(3));
console.log(buf2.includes(3));
console.log(buf3.includes(3));

console.log(buf1.indexOf(1, 2));
console.log(buf2.indexOf(1, 2));
console.log(buf3.indexOf(1, 2));
console.log(buf1.indexOf(3, 2));
console.log(buf2.indexOf(3, 2));
console.log(buf3.indexOf(3, 2));

console.log(buf1.lastIndexOf(1, 2));
console.log(buf2.lastIndexOf(1, 2));
console.log(buf3.lastIndexOf(1, 2));
console.log(buf1.lastIndexOf(3, 2));
console.log(buf2.lastIndexOf(3, 2));
console.log(buf3.lastIndexOf(3, 2));

実行結果

C:\work\node>node buffer-index.js
true
true
true
true
false
true
-1
2
2
3
-1
-1
1
2
2
-1
-1
0

関連

pizyumi
プログラミング歴19年のベテランプログラマー。業務システム全般何でも作れます。現在はWeb系の技術を勉強中。
スポンサーリンク

-Node.js