我有一个数组,它是我读过的文件的byte []。我需要检查文件的前5个字节。首先,我做了这个:
if (ips_bytes[0] != ips_ident[0] && ips_bytes[1] != ips_ident[1] && ips_bytes[2] != ips_ident[2]
&& ips_bytes[3] != ips_ident[3] && ips_bytes[4] != ips_ident[4]) {
return "Nope!";
}
这样可行,但看起来不太好,我猜它效率不高。所以我查看了其他方法并找到了Arrays.equals()。我更改了代码以反映:
if (!Arrays.equals(ips_ident, Arrays.copyOfRange(ips_bytes, 0, 4))) {
return "Baka";
}
这不起作用,我尝试了0,4和1,5,看看范围是否不同。我错过了什么,因为这看起来不错?数组值肯定是正确的。
答案 0 :(得分:6)
您的条件不相同。
如果所有相应元素对不相等,则第一个将为真
如果存在至少一对不相等的元素
,则第二个为真我相信你需要第二个代码,但是你需要修改它。 Arrays.copyOfRange的第三个参数索引是可行的。所以你需要
Arrays.copyOfRange(ips_bytes, 0, 5))
或更好
Arrays.copyOfRange(ips_bytes, 0, ips_ident.length))
答案 1 :(得分:1)
我想它应该是相同的字节范围:
if (!Arrays.equals(Arrays.copyOfRange(ips_ident, 0, 5), Arrays.copyOfRange(ips_bytes, 0, 5)))
实施例
char[] arr1 = new char[] { 'a', 'b', 'c', 'd', 'e' };
char[] arr2 = new char[] { 'a', 'b', 'c', 'k', 'm' };
System.out.println(Arrays.equals(Arrays.copyOfRange(arr1, 0, 3), Arrays.copyOfRange(arr2, 0, 3)));
答案 2 :(得分:1)
这是一种不使用不必要的内存并且可以重复使用的方法。
只需使用for循环:
public boolean compareFirstBytes(byte[] arrayOne, byte[] arrayTwo, int range) {
for (int i = 0; i < range; i++) {
if (arrayOne[i] != arrayTwo[i]) {
return false;
}
}
return true;
}