快速比较字节子阵列的方法

时间:2014-05-30 15:07:33

标签: java arrays compare byte mask

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

byte [] indicator = new byte[5];
byte [] current = new byte[10];

我想看到'current'的5个第一个字节等于'indicator'。为了做到这一点,我正在使用Arrays函数,所以我实际上正在做以下事情:

Arrays.equals(indicator, Arrays.copyOfRange(current, 0, 5))

这当然很好,但不是很快。所以我坚信必须有更好的方法来执行这样的字节比较。也许通过使用0xFF掩码???

有什么想法吗?

3 个答案:

答案 0 :(得分:4)

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

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;
}

答案 1 :(得分:2)

迭代会更快,因为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;
}

答案 2 :(得分:1)

Java 9+解决方案:

Arrays.equals(indicator, 0, 5, current, 0, 5);