我有兩個字節數組,我想知道如何去添加一個到另一個或組合它們以形成一個新的字節數組。如何結合兩個字節數組
回答
你只是想連接兩個字節數組?
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);
或者你可以只用一個列表做的工作:
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()]);
或者您可以使用System.arraycopy() – 2011-04-16 00:42:34
良好的調用。我從來沒有見過'System.arraycopy();' – pickypg 2011-04-16 00:48:18
並且我個人總是使用System.arraycopy,通常使用包裝器方法來處理常見的情況......實際上我早已寫了一個'ArrayUtil.resize'方法。 – 2011-04-16 00:50:07
假設您的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];
}
與您的代碼這裏的問題是用於索引數組的變量i將通過byteSalt數組和byteData數組。因此,確保byteData的尺寸是至少passwordSalt字符串的最大長度加上32.什麼會糾正它替換以下行:
for (int i = 0; i < byteData.length; i ++)
有:
for (int i = 0; i < byteSalt.length; i ++)
你可以使用Apace common lang包(org.apache.commons.lang.ArrayUtils
類)執行此操作。你需要做的
byte[] concatBytes = ArrayUtils.addAll(one,two);
它快嗎。我需要一個非常快速的方法。沒有循環的開銷。 – 2014-10-01 05:26:45
您對開銷的恐懼讓我覺得,當您執行此循環時,您的UI會受到凍結的困擾。也許你應該考慮一個'AsyncTask'(android),這是阻止循環中斷你的UI線程的唯一方法。 – 1owk3y 2015-07-27 13:14:16
我用這個代碼工作的很好只是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();
}
我認爲這是最好的辦法,
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;
}
- 1. 結合兩個字節WideChar
- 2. C#合併/ Decombine兩個字節數組
- 3. 如何結合兩個數字字段?
- 4. 如何結合兩個可變數組?
- 5. 結合兩個ulong值並將其轉換爲字節數組
- 6. 如何連接兩個字節數組
- 7. 如何比較兩個字節數組
- 8. 結合兩個數組
- 9. 結合兩個數組
- 10. 結合兩個數組PHP
- 11. 如何組合兩個多個數組?
- 12. 兩個字節數組的非交換組合
- 13. 如何結合兩個函數並返回一個數組?
- 14. 如何連接/拼合字節數組
- 15. 如何組合這兩個JavaScript數組
- 16. 如何組合兩個靜態數組
- 17. 如何組合(添加)兩個數組?
- 18. 如何在Xpath中將兩個節點組合成一個組?
- 19. 結合一個字節[]到單個數組
- 20. 將3個獨立的字節數組組合到一個字節數組中
- 21. Mysql結合兩個結果,並按字段將它們組合
- 22. PHP結合了兩個多維數組
- 23. 結合兩個數組與範圍
- 24. 以逗號結合兩個PHP數組
- 25. 與數組結合的兩個文件
- 26. 結合兩個數組在php
- 27. 在numpy中結合兩個數組,
- 28. 如何結合兩個NSDictionaries?
- 29. 如何結合兩個foreache's
- 30. 如何結合兩個LPCWSTR?
如果你添加它們,那麼你將如何處理溢出? – maerics 2011-04-16 00:05:30
你是什麼意思溢出? – novicePrgrmr 2011-04-16 00:06:43
你在哪裏做任何補充? – 2011-04-16 00:07:08