gpt4 book ai didi

java - 可以将 Java 数组传递给采用数组的 C/C++ 函数吗?

转载 作者:太空宇宙 更新时间:2023-11-04 08:09:37 26 4
gpt4 key购买 nike

我现在正在学习 JNI。假设我有一个 C/C++ 库函数,它将 int* 数组作为输入(我们假设 int 是 4 个字节,并且像在 Java 中一样有符号),也就是说,一个数组作为指针传递。是否可以通过 JNI 将 Java 数组 int 传递给这样的函数,而不进行任何复制(显然我们在这样做时删除了 Java 数组的长度部分)?直接 ByteBuffer 是做这些事情的唯一可行方法吗?

最佳答案

直接ByteBuffer正如您自己提到的那样,这将是避免复制的一种方式。

如果传递 Java 数组,则需要调用 Get<Primitive>ArrayElements ,它可能也可能不复制(或 Get<Primitive>ArrayRegion ,但这没有任何意义,因为它总是复制)。

还有 GetPrimitiveArrayCritical如果您只需要在“短”时间内访问元素,并且在释放元素之前不需要执行任何其他 JNI 调用,则可以使用它。它比 Get<Primitive>ArrayElements“更有可能”不复制。

一个例子:

jint len = env->GetArrayLength(myIntArray);
jint *elements = env->GetPrimitiveArrayCritical(myIntArray, NULL);

// Use elements...

env->ReleasePrimitiveArrayCritical(myIntArray, elements, 0);

参见 Oracle's JNI documentation .

关于java - 可以将 Java 数组传递给采用数组的 C/C++ 函数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40419466/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com