簡體   English   中英

名單 <byte[]> 單字節[]

[英]List<byte[]> to single byte[]

List<byte[]> listOfByteArrays;

我希望通過附加List所有元素,將此List存儲的所有byte[]只包含一個byte[] 我知道一種方法,這是通過使用System.arrayCopy()但在循環內使用它將是一個有點凌亂(temporary variables and byte[] arrays) 試圖找到一種更好的方法,但不能。 有什么指針嗎? 我可以使用任何外部API嗎?

嘗試使用ByteArrayOutputStream

ByteArrayOutputStream out= new ByteArrayOutputStream( );

在循環中

out.write(eachBytearray);

循環之后

byte result[] = out.toByteArray( );

你為什么需要臨時數組?

  • 在列表中進行一次傳遞,將各個數組的長度相加。
  • 創建一個足夠大的單個數組來保存它們
  • 在列表中進行第二次傳遞,使用System.arraycopy將列表中的數組復制到目標數組中的適當位置。 (顯然,你需要跟蹤目標數組中的偏移量。)

番石榴單線

Bytes.concat(listOfByteArray.toArray(new byte[0][]));

或更長一點(備用一個字節數組分配,發生在較短版本的toArray中)

Bytes.concat(listOfByteArray.toArray(new byte[listOfByteArray.size()][]));

這很容易從頭開始寫:

int length = 0;
for (byte[] ba : listOfByteArrays) {
    length += ba.length
}


byte[] total = new byte[length];

int index = 0;
for (byte[] ba : listOfByteArrays) {
    for (byte b : ba) {
        total[index++] = b;
    }
}

total是所需的字節數組。

我會循環列表並總結列表中數組的長度。 創建一個包含所有內容的byte []。 使用System.arrayCopy()循環並復制到適當的索引中。

我不認為第三方圖書館的保證不僅僅是你所描述的內容。

你似乎知道如何編碼,所以我將省略示例代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM