java - 将数组转换为更小的数组

标签 java arrays

我正在从存储在字节数组中的相机获取图像。我正在将此字节数组传递给 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/

相关文章:

javascript - 如何防止在数组中打印当前值(除了其他值)

java - java中的xml解析问题

java - 如何通过按退出按钮退出程序?

java - Spring:使用基于注解的配置注入(inject)原始值(属性)的构造函数

java - Listview 的项目在 android 中不会显示为真实列表

java - LinkedList 对象 add() 函数不更新值 - java

Java:为什么在此代码中使用 int x 和 int y (方法中的数组)

python - 用 pyopenCL 填充二维数组

objective-c - 如何让C数组始终直接从磁盘访问而不是保留在内存中?

Java 数组和继承