Как конвертировать jbyteArray в родной символ * в jni? - PullRequest
13 голосов
/ 09 декабря 2011

Я пытаюсь преобразовать jbyteArray в нативную строку c (char *) в jni? К сожалению, я не могу найти документацию о том, как это сделать. Я вызываю Java-функцию со следующим прототипом в коде c.

public static byte[] processFile(byte[] p_fileContent)

В коде c я вызываю эту функцию, которая возвращает байтовый массив. Содержимое этого байтового массива представляет собой строку Java. Но мне нужно преобразовать его в строку c.

jbyteArray arr = (jbyteArray) env->CallObjectMethod(clsH, midMain, jb);
printf("%s\n", (char*) arr);

1 Ответ

19 голосов
/ 09 декабря 2011

Я полагаю, вы бы использовали GetByteArrayElements и ReleaseByteArrayElements.Что-то вроде:

boolean isCopy;
jbyte* b = GetByteArrayElements(env, arr, &isCopy);

Вы должны иметь возможность привести b к char* в этот момент, чтобы получить доступ к данным в массиве.Обратите внимание, что при этом может быть создана копия данных, поэтому вам нужно обязательно освободить память, используя ReleaseByteArrayElements:

ReleaseByteArrayElements(env, arr, b, 0);

Последний параметр - это режим, указывающий, как изменяется значение bдолжны быть обработаны.0 указывает, что значения копируются обратно в arr.Если вы не хотите копировать данные обратно в arr, используйте вместо этого JNI_ABORT.

Для получения дополнительной информации см. Справочник JNI .

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