簡體   English   中英

復制數組其他所有字節的最快方法

[英]Fastest way to copy every other byte of an array

一個簡單的問題: 是否有任何方法可以將Java中的每個其他字節快速地從一個數組復制到另一個數組?

免責聲明 :我的代碼已經足夠快,但是我發現自己想知道是否有任何本機方法比簡單的for循環還快。

問題詳細信息 (針對那些感興趣的人):我將YUV字節數組拆分為三個單獨的字節數組(Y,U和V)。 如果您以前未看過YUV數組(以Android標准NV21格式),則結構為Y的高度*寬度字節,然后是UV數據的(高度*寬度)/ 2字節(我們的眼睛對色度分辨率較不敏感)交錯。 使用arraycopy可以使用以下arraycopy優化Y字節到專用數組的傳輸:

System.arraycopy(yuvs, 0, yArray, 0, imgSize.width*imgSize.height);

但是,我將UV部分復制到專用數組中,如下所示:

for (bt_y = 544; bt_y < previewSize.height*(3.0/2.0); bt_y++) {
  for (bt_x = 0; bt_x < 960;) {
    uArray[UVIndex] = yuvs[bt_y*960+bt_x++];
    vArray[UVIndex++] = yuvs[bt_y*960+bt_x++];              
  }
}

是否有一種方法可以某種方式吸收“跨步”變量或某種可以允許以已知間隔選擇元素的方法?

不會。System.arraycopy速度很快,因為它可以直接映射到memcpy,而memcpy只是通過零處理將某個內存的塊復制從一個位置復制到另一個位置。

您的案件需要處理,而且必須在某處進行。 您可以使用C(JNI)來完成此操作,但根據我的經驗,這是不值得的,無論如何,JIT編譯器將很好地優化這種簡單的情況。

暫無
暫無

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

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