[英]Direct access to part of an array
为了加快我的图像处理应用程序,我正在尝试从中间开始处理数组中的值,并使用从0开始的索引。
例如,当我使用两个数组时,我经常遇到这样的情况:
public void work(int[] array1, int[] array2, int offset)
{
int len = array1.length;
for (int i = 0; i < len; i++)
array1[i] += array2[i + offset];
}
所以我想创建一个新的变量array3,它直接映射到array2的中间(不是副本),所以我可以这样做:
public void work(int[] array1, int[] array2, int offset)
{
int[] array3 = array2[offset]...;
int len = array1.length;
for (int i = 0; i < len; i++)
array1[i] += array3[i];
}
实际上,我想要一个与此c语句等效的Java:
int *array3ptr = array2ptr + offset;
注意:我没有任何JNI或任何经验,所以如果归结为使用它,请提供工作示例。
使用纯Java数组和array[index]
表示法不可能做到这一点。 在Java中,数组永远不会重叠 。
但是,您可以将数组包装在IntBuffer
。 如果使用直接缓冲区 (请参阅allocateDirect
),您应该获得真正的良好性能。
声明如
int *array3ptr = array2ptr + offset;
将写成
IntBuffer array3 = array2.slice().position(offset);
这些
在java中,整数数组是堆上的对象。 因此int [] array2实际上是直接引用内存中的整数数组。 没有创建对象(即数组)的副本,复制只是对数组的引用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.