Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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数组的前n个字节?_Java_Arrays - Fatal编程技术网

如何比较两个java数组的前n个字节?

如何比较两个java数组的前n个字节?,java,arrays,Java,Arrays,我需要比较两个不同java byte[]数组的前n个字节。有一个Arrays equals()函数,但它首先测试数组的长度,之后的所有数组和我的数组的长度都不同,所以这不好 除了手工写我自己的循环,还有什么想法吗 谢谢,您可以将每个数组的前n个元素复制到新数组中,并在这些数组上使用array.equals() byte[] a = {1, 2, 3, 4}; byte[] b = {1, 2, 3, 4, 5, 6}; byte[] aCopy = new byte[3]; System.arr

我需要比较两个不同java byte[]数组的前n个字节。有一个Arrays equals()函数,但它首先测试数组的长度,之后的所有数组和我的数组的长度都不同,所以这不好

除了手工写我自己的循环,还有什么想法吗


谢谢,

您可以将每个数组的前n个元素复制到新数组中,并在这些数组上使用array.equals()

byte[] a = {1, 2, 3, 4};
byte[] b = {1, 2, 3, 4, 5, 6};
byte[] aCopy = new byte[3];
System.arraycopy(a, 0, aCopy, 0, aCopy.length);
byte[] bCopy = new byte[3];
System.arraycopy(b, 0, bCopy, 0, bCopy.length);
boolean equal = Arrays.equals(aCopy, bCopy);
冗长,但它会做你想做的。或者,只需从0..n循环

boolean equal = true;
for (int i = 0; equal && i < 3; i++) {
    equal = a[i] == b[i];
}
boolean equal=true;
对于(int i=0;等于&i<3;i++){
相等=a[i]==b[i];
}

为什么不想手工编写自己的循环?您只需复制一份文件,然后再次使用它:-

如果效率是一个问题,那么复制阵列是一种更快但更详细的方法

如果效率确实是一个问题,而冗长则不是,那么循环可能是最好的方式

 boolean matched = true;
 for (int i=0; i<n; i++){
   if (array1[i] != array2[i]) {
     matched = false;
     break;
   }
 }

下面是一个更高性能的解决方案,使用它可以避免中间复制操作:

ByteBuffer.wrap(array1, 0, n).equals(ByteBuffer.wrap(array2, 0, n));

Via.

您可以将感兴趣的字节复制到两个新数组中,并对它们进行比较。
//Both arrays must match at all indices between 0 and n
boolean matched = IntStream.range(0, n).allMatch(i -> array1[i] == array2[i]);
//...Of course if you are comparing non simple types, you would need to use equals()
ByteBuffer.wrap(array1, 0, n).equals(ByteBuffer.wrap(array2, 0, n));