如何在jni中将jbyteArray转换为本机char *?

时间:2011-12-08 23:34:06

标签: java java-native-interface

我想在jni中将jbyteArray转换为native c string(char *)?不幸的是我找不到任何关于如何做到这一点的文档。我正在使用c代码中的以下原型调用java函数。

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

在c代码中,我正在调用此函数,该函数返回一个字节数组。该字节数组的内容是一个java字符串。但我需要将其转换为c字符串。

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

1 个答案:

答案 0 :(得分:19)

我相信您会使用GetByteArrayElementsReleaseByteArrayElements。类似的东西:

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

此时您应该能够将b转换为char*,以便访问数组中的数据。请注意,这可能会创建数据的副本,因此您需要确保使用ReleaseByteArrayElements释放内存:

ReleaseByteArrayElements(env, arr, b, 0);

最后一个参数是一个模式,指示应如何处理b的更改。 0表示将值复制回arr。如果您不想将数据复制回arr,请改用JNI_ABORT

有关详细信息,请参阅JNI Reference