我正在从存储在字节数组中的相机获取图像。我正在将此字节数组传递给 native 函数。
问题:图像包含 native 函数不关心的颜色信息。黑白信息位于数组的前半部分。
所以基本上我想做的是:
byte[1000] image;
nativecall((byte[500])image);
这背后的原因是调用 jni 函数意味着我的图像的 memcopy。对于 30 fps,如果我只传递图像的相关部分,我可以节省一些时间和内存。
任何解决方案的约束是两个数组必须指向相同的数组/内存。因此,简单地将数组的前半部分复制到一个较小的数组并不是一种选择。
像这样的事情可以用弱引用来完成吗?
最佳答案
尝试GetByteArrayElements在你的 jni 代码中。根据 JVM 实现,它要么复制数组,要么在 Java 内存中为您提供指向它的直接指针。我只在 android 上使用它,它确实给了我一个直接的指针,但我不知道它现在是否适用于 HotSpot。
如果失败,nio direct buffers是另一种无需复制即可在 java 和 jni 代码之间共享内存的方法。
关于java - 将数组转换为更小的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15320677/