java - 复制数组每隔一个字节的最快方法

标签 java android optimization yuv arrays

作为一个简单的问题:在 Java 中有什么方法可以将每个 other 字节从一个数组快速复制到另一个数组?

免责声明:我的代码已经足够快了,但我发现自己想知道是否有任何本地方法比简单的 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++];              
  }
}

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

最佳答案

没有。 System.arraycopy 很快,因为它可以直接映射到 memcpy,而 memcpy 只是将一些内存从一个地方复制到另一个地方,零处理。

您的案例需要处理,并且必须在某个地方进行。您可以在 C (JNI) 中执行此操作,但根据我的经验,这是不值得的,JIT 编译器无论如何都会很好地优化这种简单的情况。

关于java - 复制数组每隔一个字节的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11404832/

相关文章:

android - Helper 类 - 错误无法启动 Activity ComponentInfo :

android - 为什么层次查看器不适用于三星 Galaxy TAB 7.0?

java - Android SMS Intent 被同一主体和同一接收者卡住

python - 存储和检索大量小型非结构化消息的最快方法

java - 奇怪的分配和字符串连接优化代码的一些描述

java - 使用 JMock 为一个简单的 spring JDBC DAO 编写单元测试

java - 为什么可以轻松地重建Java类文件

java - 智能理念 | xml验证错误

string - 在字符串上随机化大小写的最快方法

java - 在 java 中处理 List<Interface> 而不进行类型转换