Если вы не делаете это как академическое упражнение, как насчет
java.util.Arrays.equals(b1, b2)
Описание:
Возвращает true, если два указанных массива байтов равны одному
другой. Два массива считаются равными, если оба массива содержат
одинаковое количество элементов и все соответствующие пары элементов в
два массива равны. Другими словами, два массива равны, если они
содержат одинаковые элементы в том же порядке. Также два массива
ссылки считаются равными, если обе являются нулевыми.
Я признаю, что это «стиль Java»: -)
Поскольку вы генерируете AssertionErrors, вы можете удалить все остальные:
def assertArray(b1: Array[Byte], b2: Array[Byte]): Unit = {
if (b1 == b2) return;
if (b1 == null || b2 == null) throw new AssertionError("b1 is null while b2 is not, vice versa")
if (b1.length != b2.length) throw new AssertionError("b1.length != b2.length")
for (i <- b1.indices) {
if (b1(i) != b2(i)) throw new AssertionError("b1(%d) != b2(%d)".format(i, i))
}
}
Если, как я подозреваю, вы на самом деле используете это в тестах JUnit (отсюда assertArray), то вы можете использовать трюк, который я часто делаю, сравнивать строковые представления массивов:
def assertArray2(b1: Array[Byte], b2: Array[Byte]): Unit = {
assertEquals(toString(b1), toString(b2))
}
def toString(b: Array[Byte]) = if (b == null) "null" else java.util.Arrays.asList(b:_*).toString
, который даст вам тот же результат (AssertionError), с разницей в этом.