gpt4 book ai didi

java - 在使用 JNI 将 c++ unordered_map 返回到 java 之前将其转换为 java hashMap

转载 作者:行者123 更新时间:2023-12-02 04:33:42 25 4
gpt4 key购买 nike

我在 android 平台上有一个非常大的 c++ unordered_map 我想使用 JNI 将其作为 java 中的 hashMap 返回。

extern "C" JNIEXPORT jobject JNICALL Java_quantum_QUANTUM_getMessage(JNIEnv *env, jobject thisObj, jdoubleArray bbox) {

unordered_map<int, Foo> Map;
Map = getData(filename, bbox);

// convert Map to java object
// return java object
}

我对 JNI 还很陌生。我还没有找到任何关于如何执行此操作的有用 Material 。

我尝试了下面链接中的方法,但遇到了很多编译错误。

how to correctly send a std::map<> from C++ to Java through JNI?

另一个建议是通过 JNI 传递一个空的 javaHashmap 并填充它。但我不确定如何做到这一点。更好的解决方案是什么?

最佳答案

这需要一些调整。您可以通过在 C++ 中创建 Map 对象或将 MapJava 传递到 C++ 并在那里填写。

基本上,您需要的是:

  1. 创建HashMap
  jclass mapClass = env->FindClass("java/util/HashMap");
if(mapClass == NULL) {
return NULL; // alternatively, throw exception (recipeNo019)
}

jobject hashMap = env->NewObject(mapClass, mapConstructorID);
if(hashMap == NULL) {
return NULL; // as above
}
  • 确保将原始类型嵌入到对象中(例如,您可以将 int 嵌入到 Integer 中)
  •   jclass integerClass = env->FindClass("java/lang/Integer");
    if(integerClass == NULL) {
    return NULL; // alternatively, throw exception (recipeNo019)
    }

    jmethodID integerConstructorID = env->GetMethodID(integerClass, "<init>", "(I)V");
    if(integerConstructorID == NULL) {
    return NULL;
    }

    ...
    ...

    jobject key = env->NewObject(integerClass, integerConstructorID, pair.first);
  • 用数据填充HashMap
  •   for (auto const& pair: map) {
    jobject key = env->NewObject(integerClass, integerConstructorID, pair.first);
    jobject value = env->NewObject(integerClass, integerConstructorID, pair.second);
    if(key == NULL || value == NULL) {
    return NULL;
    }
    env->CallObjectMethod(hashMap, putMethodID, key, value);
    }

    就是这样。您可以在这里找到完整的示例代码:

    https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo047 https://github.com/mkowsiak/jnicookbook/tree/master/recipes/recipeNo048

    关于java - 在使用 JNI 将 c++ unordered_map 返回到 java 之前将其转换为 java hashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56561789/

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