java 如何判斷一個byte[] 數組中是否存在某些連續的數據

如何判斷一個byte[] 數組中是否存在某些連續的數據
1、舉例說明:

例如:我要判斷如下的數組中是否存在0X68, 0X73, 0X5f, 0X62, 0X61, 0X79這些數據,如果存在,則把第一個元素的下標找出來.
byte[] mBaseData = {
0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X04, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X04, 0X00, 0X00, 0X00, 0X04, 0X00, 0X00, 0X00, 0X08, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X08, 0X00, 0X00, 0X00, 0X06, 0X00, 0X00, 0X00, 0X06, 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79, 0X00, 0X00, 0X00, 0X00, 0X00, 0X07, 0X00, 0X00, 0X00, 0X20, 0X00, 0X00, 0X00, 0X03, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X00, 0X01, 0X00, 0X00, 0X00, 0X08, 0X00, 0X00, 0X00, 0X08, 0X00, 0X00, 0X00, 0X08 };

2、解決方案:

方法一:
首先把0X68, 0X73, 0X5f, 0X62, 0X61, 0X79 數據轉爲數組。byte[] src=new byte[]{ 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79}。然後使用while循環一個字節一個字節進行比對。

 public int getIndex() {
        byte[] src = new byte[]{0x20, 0x21, 0x30};
        byte[] mBaseData = new byte[]{0X68, 0X73, 0X5f, 0X62, 0X61, 0X79};
        int i = 0;
        while (i < mBaseData.length) {
            if (mBaseData[i] == src[0] && mBaseData[i + 1] == src[1] && mBaseData[i + 2] == src[2]) {
                return i;
            } else {
                i++;
            }
        }
        return -1;
    }

方法二:

第 1 步: 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79 數據轉爲數組。byte[] src=new byte[]{ 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79}
第 2 步:srcmBaseData 數組轉換成 String 字符串。
第 3 步: 利用String.indexOf()找到指定數據的位置。如果要截取一段數據,我們可以用String.substring()截取數據。

注意:必須滿足以下條件:
1、字節在轉換爲String過程中,必須是:一個 byte 字節 對應 一次字符編碼
2、編碼的方式必須採用 ISO-8859-1字符集,否則:一個 byte 字節轉成一個字符 時,這個字符可能需要多個 byte 字節來保存。這時候會導致數組的長度 與 轉換後的字符串的長度不等。我們再使用利用String.indexOf() 來查找位置就失去了意義了。

關於這一點可以看相關的博客:Java中byte[]轉String問題 丟失字節

例如:

byte[] src=new byte[]{ 0X68, 0X73, 0X5f, 0X62, 0X61, 0X79}
String srcString = new String(src, "ISO-8859-1");
String baseString = new String(mBaseData, "ISO-8859-1");
String,indexOf(srcString);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章