目標
さらに、バイト配列Bを含んでなる方法を実施するためのバイト配列、同一配列
原則
最後のバイトに再循環又は残りのバイトより短いバイト場合、設定ヒット変数はバイトの数は、連続ヒットの2つの連続配列を記録し、0に初期化され、ヒット数がバイト配列Bの長さに等しい、戻り真長さBの配列、変数Bをヒットしていないバイト配列の長さに等しい、falseが返されます
アルゴリズム
- 1.長さはBバイト配列バイト配列A直接リターン偽よりも大きい場合
- 2.取得サイクルバイト配列の各バイト値
- 3.ヒット変数Bはリターンが真、バイト配列の長さに等しいです
- 4.現在のバイトインデックス値はバイト値バイト配列Bの変数の値をヒットに等しく、そうであれば、ヒット変数1をインクリメントし、次のバイトの比較値に進み、ステップ2に進み、そうでない場合に進みステップ5
- 変数がヒットを設定されている0
- 前記Aバイト配列は、残りの長さのバイト数はバイト配列Bの長さよりも大きいと判断第二実行はステップループに、または外にジャンプした場合よりも大きい、返し偽
練習
/**
* 判断是否一个字节数组按顺序包含另一个字节数组
*
* @param pSrcByteArray
* @param pSubByteArray
* @return
*/
public static boolean isIncludeByteArray(byte[] pSrcByteArray, byte[] pSubByteArray) {
boolean retValue = false;
int lvSrcByteArrayLen = pSrcByteArray.length;
int lvSubByteArrayLen = pSubByteArray.length;
while(true) {
if(lvSrcByteArrayLen < lvSubByteArrayLen) {
break;
}
int lvHitByteNumberValue = 0;
for(int i=0; i<lvSrcByteArrayLen; i++) {
int tvByteValue = pSrcByteArray[i];
if(lvHitByteNumberValue == pSubByteArray.length) {
retValue = true;
break;
}
if(tvByteValue == pSubByteArray[lvHitByteNumberValue]) {
lvHitByteNumberValue++;
continue;
}
lvHitByteNumberValue = 0;
//剩余字节数
int tvRemaindingByteLen = lvSrcByteArrayLen - i - 1;
if(tvRemaindingByteLen < pSubByteArray.length) {
break;
}
}
break;
}
return retValue;
}