我现在正在了解JNI。假设我有一个C / C ++库函数,它将int *数组作为输入(我们假设int是4个字节并且像在Java中一样签名),也就是说,一个数组作为指针传递。是否可以通过JNI将int的Java数组传递给这样的函数,而不进行任何复制(显然我们在这样做时删除了Java数组的长度部分)?直接ByteBuffer是唯一可行的方法吗?
答案 0 :(得分:2)
直接ByteBuffer
是避免复制的一种方法,正如你自己提到的那样。
如果你传递一个Java数组,你需要调用Get<Primitive>ArrayElements
,这可能是或者可能不是复制(或Get<Primitive>ArrayRegion
,但这是没有意义的,因为它总是副本)。
如果您只需要在短时间内访问元素,并且在释放元素之前不需要执行任何其他JNI调用,那么您还可以使用GetPrimitiveArrayCritical
。 <{1}}“更有可能”不复制。
一个例子:
Get<Primitive>ArrayElements