У меня есть два байтовых массива, и мне интересно, как я буду добавлять один к другому или комбинировать их для формирования нового байтового массива.
Как объединить два байтовых массива
Ответ 1
 Вы просто пытаетесь объединить два byte массива?
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
byte[] combined = new byte[one.length + two.length];
for (int i = 0; i < combined.length; ++i)
{
    combined[i] = i < one.length ? one[i] : two[i - one.length];
}
  Или вы можете использовать System.arraycopy:
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
byte[] combined = new byte[one.length + two.length];
System.arraycopy(one,0,combined,0         ,one.length);
System.arraycopy(two,0,combined,one.length,two.length);
 Или вы можете просто использовать List чтобы сделать работу:
byte[] one = getBytesForOne();
byte[] two = getBytesForTwo();
List<Byte> list = new ArrayList<Byte>(Arrays.<Byte>asList(one));
list.addAll(Arrays.<Byte>asList(two));
byte[] combined = list.toArray(new byte[list.size()]);
  Или вы можете просто использовать ByteBuffer с преимуществом добавления множества массивов.
byte[] allByteArray = new byte[one.length + two.length + three.length];
ByteBuffer buff = ByteBuffer.wrap(allByteArray);
buff.put(one);
buff.put(two);
buff.put(three);
byte[] combined = buff.array();
		Ответ 2
Вы можете сделать это, используя пакет Apace common lang (org.apache.commons.lang.ArrayUtils class). Вам нужно сделать следующее
byte[] concatBytes = ArrayUtils.addAll(one,two);
		Ответ 3
Я думаю, что это лучший подход,
public static byte[] addAll(final byte[] array1, byte[] array2) {
    byte[] joinedArray = Arrays.copyOf(array1, array1.length + array2.length);
    System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
    return joinedArray;
}
		Ответ 4
Предполагая, что ваш массив byteData больше, чем 32 + byteSalt.length()... вы собираетесь на него длина, а не byteSalt.length. Вы пытаетесь скопировать из-за конца массива.
Ответ 5
String temp = passwordSalt;
byte[] byteSalt = temp.getBytes();
int start = 32;
for (int i = 0; i < byteData.length; i ++)
{
    byteData[start + i] = byteSalt[i];
}
Проблема с вашим кодом здесь в том, что переменная i, которая используется для индексирования массивов, проходит мимо массива byteSalt и массива byteData. Итак, убедитесь, что byteData имеет размер как минимум максимальной длины строки passwordSalt плюс 32. Что будет исправлять, она заменяет следующую строку:
for (int i = 0; i < byteData.length; i ++)
с:
for (int i = 0; i < byteSalt.length; i ++)
		Ответ 6
Я использовал этот код, который хорошо работает, просто добавляет appendData и либо передает один байт с массивом, либо два массива для их объединения:
protected byte[] appendData(byte firstObject,byte[] secondObject){
    byte[] byteArray= {firstObject};
    return appendData(byteArray,secondObject);
}
protected byte[] appendData(byte[] firstObject,byte secondByte){
    byte[] byteArray= {secondByte};
    return appendData(firstObject,byteArray);
}
protected byte[] appendData(byte[] firstObject,byte[] secondObject){
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream( );
    try {
        if (firstObject!=null && firstObject.length!=0)
            outputStream.write(firstObject);
        if (secondObject!=null && secondObject.length!=0)   
            outputStream.write(secondObject);
    } catch (IOException e) {
        e.printStackTrace();
    }
    return outputStream.toByteArray();
}
		Ответ 7
 Самый простой метод (встроенный, предполагая, что a и b - два заданных массива):
byte[] c = (new String(a, cch) + new String(b, cch)).getBytes(cch);
 Это, конечно, работает с более чем двумя слагаемыми и использует набор символов, определенный где-то в вашем коде:
static final java.nio.charset.Charset cch = java.nio.charset.StandardCharsets.ISO_8859_1;
 Или, в более простой форме, без этой кодировки:
byte[] c = (new String(a, "l1") + new String(b, "l1")).getBytes("l1");
  Но вам нужно подавить исключение UnsupportedEncodingException которое вряд ли будет выдано.
Самый быстрый метод:
public static byte[] concat(byte[] a, byte[] b) {
    int lenA = a.length;
    int lenB = b.length;
    byte[] c = Arrays.copyOf(a, lenA + lenB);
    System.arraycopy(b, 0, c, lenA, lenB);
    return c;
}