[英]Java: what is the best way to convert ArrayList<Byte> to byte[]?
ArrayList<Byte> bytes = new ArrayList<Byte>();
try {
int data = putObjectRequest.getInputStream().read();
bytes.add((byte) data);
while (data != -1) {
data = putObjectRequest.getInputStream().read();
bytes.add((byte)data);
}
} catch (IOException e) {
e.printStackTrace();
}
我想將其轉換為byte[]
。 這是唯一的方法嗎?
byte[] byteArray = new byte[bytes.size()];
for (int i = 0; i < bytes.size(); i++) {
byteArray[i] = bytes.get(i);
}
我建議使用ByteArrayOutputStream
而不是ArrayList<Byte>
來收集輸入:
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
int data = putObjectRequest.getInputStream().read();
while (data != -1) {
bos.write(data);
data = putObjectRequest.getInputStream().read();
}
} catch (IOException e) {
e.printStackTrace();
}
byte[] byteArray = bos.toByteArray();
這避免了拳擊和拆箱每個字節的可怕開銷。 (我還修復了原始代碼中的一個小錯誤,如果putObjectRequest
為空,則會寫入-1
。)
byte[] byteArray = new byte[bytes.size()];
for (int i = 0; i < bytes.size(); i++) {
byteArray[i] = bytes.get(i);
}
是的,這是唯一的方法。
byte[] byteArray = bytes.toArray(new byte[bytes.size()]);
使用toArray()
作為另一個答案建議不起作用,因為該方法不能自動包裝類型轉換Byte
的原始byte
。
在Apache Commons中使用ArrayUtils :
byte[] byteArray = ArrayUtils.toPrimitive(bytes.toArray(new Byte[bytes.size()]));
不。 更輕松:
Byte[] byteArray = bytes.toArray(new Byte[bytes.size()]);
如果你真的想要原語:
byte[] primitives = new byte[byteArray.length]
for (int i = 0; i < byteArray.length; i++) {
primitives [i] = (byte)byteArray[i];
}
這可以保證鏈表和調整大小數組實現的線性時間復雜度。
從5.0開始支持它:
http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray(T [])
http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html
http://docs.oracle.com/javase/1.5.0/docs/api/java/util/ArrayList.html
你總是可以使用類似TByteList
從trove4j
,而不是你ArrayList<Byte>
。 您的算法將變為:
TByteList bytes = new TByteArrayList();
try {
int data = putObjectRequest.getInputStream().read();
bytes.add((byte) data);
while (data != -1) {
data = putObjectRequest.getInputStream().read();
bytes.add((byte)data);
}
} catch (IOException e) {
e.printStackTrace();
}
byte[] byteArray = bytes.toArray();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.