如何比较两个java数组的前n个字节?
我需要比较两个不同java byte[]数组的前n个字节。有一个Arrays equals()函数,但它首先测试数组的长度,之后的所有数组和我的数组的长度都不同,所以这不好 除了手工写我自己的循环,还有什么想法吗如何比较两个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
谢谢,您可以将每个数组的前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));