繁体   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