JNI的比较

时间:2010-04-08 11:29:48

标签: c++ java-native-interface

这是一个“愚蠢的问题:在JNI中可以比较两个jstrings吗?如果是这样的话?”

1 个答案:

答案 0 :(得分:2)

你有2个选项(我假设你想比较相等......)

  1. 将两个jstrings转换为wstrings并进行比较
  2. 调用jstring的equals方法(但是这需要对JVM进行几次调用,因此比选项1慢。)
  3. 对于选项1,您想尝试以下内容。我没有选项2的源代码。

    警告我没有编译过这个,甚至没有测试过,但你可能想要这样的东西。如果java字符串包含除ASCI字符以外的任何内容,我认为存在一个错误。我也没有做过任何错误检查。

    jbyteArray bytes = 0;
    jclass localClass = env->FindClass("java/lang/String");
    jmethodID methodID = env->GetMethodID(localClass, "getBytes", "()[B");
    bytes = (jbyteArray)env->CallObjectMethod( jstr, methodID);
    jint len = env->GetArrayLength( bytes);
    char* data = new char[len+1];
    env->GetByteArrayRegion( bytes, 0, len,(jbyte *)data);
    data[len] = 0;
    
    std::wstring result(data);
    

    对第二个jstring执行相同的操作,然后比较2 std::wstring