Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 快速比较字节子数组的方法_Java_Arrays_Compare_Byte_Mask - Fatal编程技术网

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

Java 快速比较字节子数组的方法,java,arrays,compare,byte,mask,Java,Arrays,Compare,Byte,Mask,在我目前工作的项目范围内,我使用存储在10字节数组中的二进制数据,并试图找到一种快速比较它们的方法。我最感兴趣的是5个最重要的字节,所以我想在字节的子数组之间进行比较。 例如,我有两个参数: byte [] indicator = new byte[5]; byte [] current = new byte[10]; 我想看看“current”的前5个字节中有多少个等于“indicator”。为了做到这一点,我使用了Arrays函数,所以我实际上做了以下工作: Arrays.equals(i

在我目前工作的项目范围内,我使用存储在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
遮罩


有什么想法吗?

迭代会更快,因为
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;
}
公共布尔值相等(字节[]a1,字节[]a2,整数大小){

对于(int i=0;i您可以编写助手方法,它比分配新副本更快:

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;
}
public boolean equalsInRange(字节[]arr1,int-from1,int-to1,字节[]arr2,int-from2,int-to2){
if(to1-从1<0 | |到1-从1!=到2-从2)
返回false;
int i1=from1,i2=from2;
而(i1Java 9+的解决方案:

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

您不需要复制它。只需编写一个手动函数,对字节进行迭代并进行比较。复制过程会使您的速度变慢。
private static compareFirstNBytes(byte[]a,byte[]b,int n){/}
我很好奇-你的尝试有多快,需要多快?因为我会猜到你的尝试已经很快了(虽然简单的循环会更快),这不会有很大的区别。。。