2012-07-09 51 views
1

作为一个简单的问题:有没有什么办法可以将每个其他字节快速从一个数组复制到另一个数组中?最快的方法来复制阵列的每个其他字节

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

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

回答

1

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

您的情况需要处理,并且必须在某处发生。你可以用C(JNI)来完成,但根据我的经验,这不值得,JIT编译器无论如何都会优化这样一个简单的例子。

相关问题