2바이트 어레이를 비교하시겠습니까?(자바)
~을 알고 있는 바이너리 시퀀스가 포함된 바이트 배열이 있습니다.2진수 배열이 정상인지 확인해야겠어난 시도했다..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)
사물을 다룰 때==
in java는 참조 값을 비교합니다.어레이에 대한 참조가 다음에서 반환되었는지 확인 중입니다.toByteArray()
에 기재되어 있는 참조와 동일합니다.array
물론 절대 사실이 아닐 수도 있죠또한 어레이 클래스는 덮어쓰지 않습니다..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는 연산자를 오버로드하지 않기 때문에 보통 기본형이 아닌 경우 메서드가 필요합니다.Arrays.equals() 메서드를 사용해 보십시오.
둘 다 사용할 수 있습니다.Arrays.equals()
그리고.MessageDigest.isEqual()
이 두 가지 방법에는 몇 가지 차이가 있습니다.
MessageDigest.isEqual()
시간 지연 비교 방법입니다.Arrays.equals()
는 시간 제한이 없으며 보안 응용 프로그램에서 사용할 경우 몇 가지 보안 문제가 발생할 수 있습니다.
차이에 대한 자세한 내용은 Arrays.equals()와 MessageDigest.isEqual()을 참조하십시오.
물론 Arrays.equal(byte[] first, byte[] second)의 답변은 정확합니다.저는 낮은 레벨에서 작업하는 것을 좋아하지만, 동등성 테스트 범위를 실행할 수 있는 낮은 레벨의 효율적인 기능을 찾을 수 없었습니다.필요한 사람이 있다면, 내 자신의 것을 서둘러야 했다.
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;
}
유닛 테스트를 위해 2개의 어레이를 비교하고 싶었기 때문에 공유할 수 있다고 생각했습니다.
다음 방법으로도 실행할 수 있습니다.
@Test
public void testTwoArrays() {
byte[] array = new BigInteger("1111000011110001", 2).toByteArray();
byte[] secondArray = new BigInteger("1111000011110001", 2).toByteArray();
Assert.assertArrayEquals(array, secondArray);
}
자세한 내용은 JUnit 어설션의 어레이 비교에서 확인할 수 있습니다.
언급URL : https://stackoverflow.com/questions/5440039/compare-two-byte-arrays-java
'sourcecode' 카테고리의 다른 글
static 변수와 const 변수의 차이점은 무엇입니까? (0) | 2022.09.03 |
---|---|
Vuex-ORM을 통한 양방향 데이터 바인딩 (0) | 2022.09.03 |
java.displaces를 클릭합니다.UnsupportedClassVersionError 지원되지 않는 major.minor 버전 51.0 (0) | 2022.09.03 |
vue-router에 의해 페이지가 다시 열리면 VueJS 후크 마운트()가 호출되지 않음 (0) | 2022.09.03 |
init-module 및 context-module (0) | 2022.09.03 |