Сравнение в JNI - PullRequest
       10

Сравнение в JNI

1 голос
/ 08 апреля 2010

Вот глупый вопрос: можно ли сравнить две строки в JNI? Если да, то как?

1 Ответ

2 голосов
/ 08 апреля 2010

У вас есть 2 варианта (я полагаю, вы хотите сравнить на равенство ...)

  1. Преобразовать обе строки jstring и сравнить
  2. Вызвать метод equals дляjstring (однако для этого требуется несколько вызовов JVM, поэтому он будет медленнее, чем вариант 1.)

Для варианта 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 '*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...