sourcecode

2바이트 어레이를 비교하시겠습니까?(자바)

copyscript 2022. 9. 3. 13:32
반응형

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

반응형