Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将数组强制转换为较小大小的数组_Java_Arrays - Fatal编程技术网

Java 将数组强制转换为较小大小的数组

Java 将数组强制转换为较小大小的数组,java,arrays,Java,Arrays,我从相机中得到一个图像,存储在字节数组中。我将这个字节数组传递给一个本机函数 问题:图像包含本机函数不关心的颜色信息。黑白信息位于阵列的前半部分 所以基本上我想做的是: byte[1000] image; nativecall((byte[500])image); 这背后的原因是对jni函数的调用意味着我的映像的memcopy。如果我只通过图像的相关部分,以30 fps的速度我可以节省一些时间和内存 任何解决方案的约束条件都是两个数组必须指向同一个数组/内存。因此,简单地将数组的前半部分复制到

我从相机中得到一个图像,存储在字节数组中。我将这个字节数组传递给一个本机函数

问题:图像包含本机函数不关心的颜色信息。黑白信息位于阵列的前半部分

所以基本上我想做的是:

byte[1000] image;
nativecall((byte[500])image);
这背后的原因是对jni函数的调用意味着我的映像的memcopy。如果我只通过图像的相关部分,以30 fps的速度我可以节省一些时间和内存

任何解决方案的约束条件都是两个数组必须指向同一个数组/内存。因此,简单地将数组的前半部分复制到较小的数组中是不可取的


像这样的事情可以用WeakReference来完成吗?

不要将得到的图像存储在字节[1000]数组中,而是从一开始就将其存储在2字节[500]数组中,然后将感兴趣的图像传递给本机函数

您可以创建一个助手类,如

class MyImage {
    public byte[500] grayInfo;
    public byte[500] colorInfo;
}

由于数组长度不是该类型的一部分,因此在这里强制转换也无济于事。

与其将获得的图像存储在字节[1000]数组中,不如从一开始就将其存储在2字节[500]数组中,然后将感兴趣的图像传递给本机函数

您可以创建一个助手类,如

class MyImage {
    public byte[500] grayInfo;
    public byte[500] colorInfo;
}

由于数组长度不是该类型的一部分,因此在这里强制转换也无济于事。

您似乎甚至没有考虑明显的答案,即将长度和数组传递给本机方法。

您似乎甚至没有考虑明显的答案,将长度和数组传递给本机方法。

尝试在jni代码中使用。根据JVM实现,它要么复制数组,要么在java内存中为您提供指向数组的直接指针。我只在android上使用过它,它确实给了我一个直接的指针,但我不知道它现在是否可以在HotSpot上使用

如果失败了,还有另一种方法可以在java和jni代码之间共享内存,而无需复制。

请尝试在jni代码中添加内存。根据JVM实现,它要么复制数组,要么在java内存中为您提供指向数组的直接指针。我只在android上使用过它,它确实给了我一个直接的指针,但我不知道它现在是否可以在HotSpot上使用


如果失败,是java和jni代码之间共享内存而无需复制的另一种方法。

我很久没有使用jni了,但是你不能简单地传递数组和数组中重要信息开始的索引吗?本机代码只能复制相关部分。我已经很长时间没有使用JNI了,但是你不能简单地在数组中传递数组和索引,其中包含有意义的信息开始吗?本机代码只能复制相关部分。我认为使用nio和直接缓冲区实际上是解决此问题的最佳方案。我认为使用nio和直接缓冲区实际上是解决此问题的最佳方案。