比较两个字节数组? (JAVA)
我有一个字节数组,其中包含一个已知的二进制序列。 我需要确认二进制序列是它应该是什么。 我已经尝试.equals
除了==
,但都没有工作。
byte[] array = new BigInteger("1111000011110001", 2).toByteArray(); if (new BigInteger("1111000011110001", 2).toByteArray() == array){ System.out.println("the same"); } else { System.out.println("different'"); }
在你的例子中,你有:
if (new BigInteger("1111000011110001", 2).toByteArray() == array)
在处理对象时,java中的==
比较参考值 。 您正在检查toByteArray()
返回的数组的引用是否与数组中的引用相同,这当然不会是真的。 另外,数组类不会覆盖.equals()
所以行为是Object.equals()
的行为,它也只是比较参考值。
为了比较两个数组的内容 , Arrays类提供了静态数组比较方法
byte[] array = new BigInteger("1111000011110001", 2).toByteArray(); byte[] secondArray = new BigInteger("1111000011110001", 2).toByteArray(); if (Arrays.equals(array, secondArray)) { System.out.println("Yup, they're the same!"); }
查看静态java.util.Arrays.equals()
系列的方法。 有一个正是你想要的。
Java不会重载操作符,所以通常需要一个非基本types的方法。 试试Arrays.equals()方法。
你可以同时使用Arrays.equals()
和MessageDigest.isEqual()
。 这两种方法虽然有一些差异。
MessageDigest.isEqual()
是一个时间常数比较方法,而Arrays.equals()
是非时间常量的,如果您在安全应用程序中使用它,可能会带来一些安全问题。
有关差异的细节可以在Arrays.equals()和MessageDigest.isEqual()
当然,Arrays.equal(byte [] first,byte [] second)的接受答案是正确的。 我喜欢在较低的水平上工作,但我无法find一个低级别的高效函数来执行相等testing范围。 如果有人需要,我必须自己动手:
public static boolean ArraysAreEquals( byte[] first, int firstOffset, int firstLength, byte[] second, int secondOffset, int secondLength ) { if( firstLength != secondLength ) { return false; } for( int index = 0; index < firstLength; ++index ) { if( first[firstOffset+index] != second[secondOffset+index]) { return false; } } return true; }