java - 使用 JNI 将列表 <unsigned char*> 从 C++ 返回到 Java

标签 java c++ list java-native-interface

我有以下 JNI 方法,

JNIEXPORT jobject JNICALL Java_projlib_DeserializeBuffer
(JNIEnv *env, jobject obj, jbyteArray inBufferData)

我创建了一个 unsigned char* 的列表并使用从 inBufferData 中提取的一些数据填充它在我的 C++ 代码中

list<unsigned char*> returnBuffer

我想退回 returnBuffer在我的 Java 代码中,它将是一个字节数组列表,List<byte[]> .

请告诉我如何通过 jobject 传递 unsigned char* 列表通过 JNI,然后在 Java 中获取它以进行进一步处理。

最佳答案

您将无法直接执行此操作。您必须在 C++ 中实例化所需 Java 列表实现的实例(因为 List 是一个接口(interface)),将其放入 jobject 中,然后添加 jbytearray 项目到它,然后返回列表。

示例

由于我没有工作的 JNI 环境,这个片段只是说明性的(当你开始工作时可以随意编辑它),但是你需要的可以通过这个实现:

jclass arrayListClass = env->FindClass("java/util/ArrayList"); // Find ArrayList class
jmethodID constructor = env->GetMethodID(arrayListClass, "<init>", "()V"); // Find ArrayList constructor
jobject arrayList = env->NewObject(arrayListClass, constructor); // Create new ArrayList instance
jmethodID add = env->GetMethodID(arrayListClass, "add", "(Ljava/lang/Object;)Z"); // Find the ArrayList::add method
jbyteArray item =env->NewByteArray(10); // Instantiate a new byte[]
env->CallBooleanMethod(arrayList, add, item); // Add the byte[] to the ArrayList

关于java - 使用 JNI 将列表 <unsigned char*> 从 C++ 返回到 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33074872/

相关文章:

java - hadoop job -kill <ID> 无法杀死

java - 将响应从队列返回到发出请求的同一服务器

c++ - 这个给定数据结构的时间复杂度

c++ - 实现宏 for while 循环

python - 如何将集合列表作为单独的参数传递给函数?

java - 在 List 中使用通配符时出现编译时错误

java - 网络 javaSE 应用程序

java - 从包中提取数据

c++ - 在caffe中获取Blob数据

python - 将列表中的可能值添加到 groupby 结果