Tôi có hai mảng byte và tôi tự hỏi làm thế nào tôi sẽ đi về việc thêm một đến khác hoặc kết hợp chúng để tạo thành một mảng byte mới.Làm thế nào để kết hợp hai mảng byte
Trả lời
Bạn đang cố gắng ghép nối hai mảng 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];
}
Hoặc bạn có thể sử dụng 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);
Hoặc bạn chỉ có thể sử dụng một danh sách để làm việc:
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()]);
Hoặc bạn có thể sử dụng System.arraycopy() –
Cuộc gọi tốt. Tôi không bao giờ nhìn thấy 'System.arraycopy(); ' – pickypg
Và cá nhân, tôi luôn sử dụng System.arraycopy, thường với các phương thức wrapper cho trường hợp phổ biến ... thực ra tôi đã viết từ lâu một phương thức' ArrayUtil.resize'. –
Giả sử mảng byteData
của bạn lớn hơn 32 + byteSalt.length()
... bạn sẽ có chiều dài không phải là byteSalt.length
. Bạn đang cố gắng sao chép từ ngoài phần cuối mảng.
String temp = passwordSalt;
byte[] byteSalt = temp.getBytes();
int start = 32;
for (int i = 0; i < byteData.length; i ++)
{
byteData[start + i] = byteSalt[i];
}
Vấn đề với mã của bạn ở đây là biến i đang được sử dụng để lập chỉ mục các mảng sẽ đi qua cả mảng byteSalt và mảng byteData. Vì vậy, Hãy chắc chắn rằng byteData được kích thước để có ít nhất chiều dài tối đa của chuỗi passwordSalt cộng 32. Điều gì sẽ sửa nó được thay thế dòng sau:
for (int i = 0; i < byteData.length; i ++)
với:
for (int i = 0; i < byteSalt.length; i ++)
Bạn có thể làm điều này bằng cách sử dụng gói ngôn ngữ chung Apace (org.apache.commons.lang.ArrayUtils
lớp). Bạn cần phải làm những điều sau đây
byte[] concatBytes = ArrayUtils.addAll(one,two);
Có nhanh không. Tôi cần một phương pháp thực sự nhanh. Không có phí vòng lặp. –
Nỗi sợ hãi của bạn về overheads làm cho tôi nghĩ rằng bạn đang gặp rắc rối bởi đóng băng giao diện người dùng của bạn bất cứ khi nào bạn thực hiện vòng lặp này. Có lẽ bạn nên xem xét một 'AsyncTask' (android), đó là cách duy nhất để ngăn chặn một vòng lặp làm gián đoạn chuỗi giao diện người dùng của bạn. – 1owk3y
Tôi đã sử dụng mã này mà hoạt động khá tốt chỉ appendData và một trong hai vượt qua một byte duy nhất với một mảng, hoặc hai mảng để kết hợp chúng:
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();
}
Tôi nghĩ rằng đó là cách tiếp cận tốt nhất,
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. Kết hợp hai mảng
- 2. Làm thế nào để kết hợp mảng trong groovy?
- 3. JavaScript: Cách kết hợp/kết hợp hai mảng để nối vào một mảng?
- 4. Làm thế nào để kết hợp hai phần tử mảng numpy khôn ngoan trong python?
- 5. Làm thế nào để bạn kết hợp hai repo git?
- 6. Làm thế nào để kết hợp hai procs thành một?
- 7. Làm thế nào để kết hợp hai chuỗi trong cành?
- 8. PHP: Làm thế nào để kết hợp hai lớp này?
- 9. Java: Làm thế nào để "cắt" một mảng byte?
- 10. Làm thế nào để gửi mảng byte qua RestTemplate
- 11. Kết hợp hai mảng trong JavaScript
- 12. Làm thế nào để phát hiện kết thúc chuỗi trong mảng byte để chuyển đổi chuỗi?
- 13. Làm thế nào tôi có thể kết hợp hai mảng trong Objective-C?
- 14. Làm cách nào để hợp nhất hai mảng để tạo một mảng trong JavaScript?
- 15. Làm thế nào để chuyển đổi chuỗi thành mảng byte?
- 16. Mảng byte Android tới Bitmap Cách làm thế nào để
- 17. Làm thế nào để tạo một mảng byte trong C++?
- 18. Làm thế nào để kiểm tra xem một mảng byte là một hình ảnh hợp lệ?
- 19. Làm cách nào để kết hợp hai ResultSets trong Java?
- 20. Làm cách nào để kết hợp hai bảng trong NHibernate?
- 21. Làm thế nào để kết hợp hai bảng dữ liệu và đặt kết quả
- 22. Làm thế nào để so sánh hai mảng?
- 23. Làm thế nào để kết hợp hai tiêu chuẩn khác nhau Mongoid
- 24. Làm thế nào để kết hợp hai vectơ có độ dài khác nhau trong R
- 25. Hợp nhất hai byte trong java/android
- 26. Làm cách nào để kết hợp hai Doctrine 2 ArrayCollection()
- 27. Làm cách nào để kết hợp hai pixel ARGB?
- 28. Làm cách nào để sử dụng tính năng Go, nối thêm hai lát hoặc mảng byte []?
- 29. php hợp nhất hai mảng
- 30. Làm thế nào để tải kết quả MySQLi được đặt thành mảng hai chiều?
Nếu bạn thêm chúng thì bạn sẽ đối phó với tình trạng tràn như thế nào? – maerics
tràn ngập ý nghĩa của bạn là gì? – novicePrgrmr
Bạn đang làm gì thêm? –