比较字节子数组的快速方法

pkr*_*ran 5 java arrays byte compare mask

在我当前正在工作的项目范围内,我使用存储在 10 字节数组中的二进制数据,并且我正在尝试找到一种快速方法来比较它们。我最感兴趣的是 5 个最高有效字节,因此我想在字节子数组之间进行比较。例如,我有这两个参数:

byte [] indicator = new byte[5];
byte [] current = new byte[10];
Run Code Online (Sandbox Code Playgroud)

我想看到“当前”的前 5 个字节等于“指示器”。为此,我使用了数组函数,因此我实际上执行了以下操作:

Arrays.equals(indicator, Arrays.copyOfRange(current, 0, 5))
Run Code Online (Sandbox Code Playgroud)

当然,这工作得很好,但没有达到要求的那么快。所以我坚信一定有更好的方法来执行这样的字节比较。也许可以用0xFF面具???

有任何想法吗?

Dmi*_*urg 5

您可以编写辅助方法,它比分配新副本更快:

public boolean equalsInRange (byte[] arr1, int from1, int to1, byte[] arr2, int from2, int to2) {
    if (to1 - from1 < 0 || to1 - from1 != to2 - from2)
        return false;
    int i1 = from1, i2 = from2;
    while (i1 <= to1) {
        if (arr1[i1] != arr2[i2])
            return false;
        ++i1;
        ++i2;
    }
    return true;
}
Run Code Online (Sandbox Code Playgroud)


Anu*_*oob 3

仅进行迭代会更快,因为copyOfRange会重新分配内存并创建新数组。

public boolean isEqual(byte[] a1, byte[] a2, int size) {
    for(int i=0;i<size;i++)
        if (a1[i] != a2[i])
            return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)