如何组合两个字节数组

我有两个字节数组,我想知道如何去添加一个到另一个或组合他们形成一个新的字节数组。

你只是想连接两个字节数组?

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()]); 

你可以使用Apace common lang包( org.apache.commons.lang.ArrayUtils类)来做到这一点。 您需要执行以下操作

 byte[] concatBytes = ArrayUtils.addAll(one,two); 

假设你的byteData数组比32 + byteSalt.length() …要长,而不是byteSalt.length 。 你试图从数组结尾复制。

 String temp = passwordSalt; byte[] byteSalt = temp.getBytes(); int start = 32; for (int i = 0; i < byteData.length; i ++) { byteData[start + i] = byteSalt[i]; } 

你的代码在这里的问题是,用于索引数组的variablesi正在经过byteSalt数组和byteData数组。 所以,请确保byteData的大小至less为passwordSaltstring的最大长度加32个字符。正确的是replace下面一行:

 for (int i = 0; i < byteData.length; i ++) 

有:

 for (int i = 0; i < byteSalt.length; i ++) 

我认为这是最好的办法,

 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; } 

我已经使用了这个工作得很好的代码,只需要执行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(); }