1

作为一个简单的问题:有没有办法在 Java 中将每个其他字节从一个数组快速复制到另一个数组?

免责声明:我的代码已经足够快了,但我发现自己想知道是否有任何本机方法比简单的 for 循环更快。

问题详细信息(对于那些感兴趣的人):我将 YUV 字节数组拆分为三个单独的字节数组(Y、U 和 V)。如果您之前没有见过 YUV 数组(在 Android 标准 NV21 格式中),则结构是 Y 的高度*宽度字节,后跟(高度*宽度)/2 字节的 UV 数据(我们的眼睛对色度分辨率不太敏感)交错. 可以使用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++];              
  }
}

有没有一种方法可以以某种方式接受“步幅”变量或可以允许以已知间隔选择元素的方法?

4

1 回答 1

1

不。 System.arraycopy 速度很快,因为它可以直接映射到 memcpy,而 memcpy 反过来只是将一些内存从一个地方复制到另一个地方,并且零处理。

您的案件需要处理,而且必须在某处进行。你可以用 C (JNI) 来做,但根据我的经验,这是不值得的,JIT 编译器无论如何都会很好地优化这样一个简单的案例。

于 2012-07-10T02:25:06.637 回答