Javaは:バイト配列は、さらに、バイト配列、バイト順序と同じものを含む方法を決定します

目標

さらに、バイト配列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;
	}
公開された118元の記事 ウォン称賛14 ビュー50000 +

おすすめ

転載: blog.csdn.net/github_38641765/article/details/100123835