将char * tab [10]转换为java对象(JNI)

时间:2010-12-17 09:09:43

标签: java c java-native-interface

我正在尝试在使用JNI的java中使用C API。我不是C程序员......

这是我必须转换的C“对象”:char * tab [10]

首先,我不确定它是什么意思:它是指向char选项卡的指针,还是指向char的指针选项卡? (有什么不同吗?)。

然后,等效的java对象是什么?

2 个答案:

答案 0 :(得分:0)

它(很可能)是一个包含10个字符串的数组,因此可以直接建模为:

String[] tab = new String[10];

它也可能是一个字符缓冲区数组,因此您可以使用StringBuilder而不是String。请记住,Java数组本身就是对象,并且知道它们的大小,因此信息不会附加到类型上(与C类似,其中数组大小是类型特征)。

我不希望通过JNI直接传输类型/值;你需要一些转换胶水代码。

答案 1 :(得分:0)

char * tab [10]是指向字符数组的指针(第一个元素上的点)。

这是JNI API: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/jniTOC.html

JNI中“ C char ”的等效类型是 jchar - 在java中它是“ char ”原始类型; 使用“C chars”数组可以做的事情的可能性是:将它复制到java中的existsand String对象或java原始字符数组中。 有用的链接: http://download.oracle.com/javase/1.5.0/docs/guide/jni/spec/functions.html#array_operations

第二种方式可能是这样的:

将java char数组传递给JNI调用,或者使用 New< PrimitiveType > Array 函数从C代码创建新的java数组。但是,您将以java中的数组指针结束。 他们将你的C chars复制到java的一个:

jEnv->ReleaseCharArrayElements(javaCharArray, C_CharArray, JNI_COMMIT);

其中jEnv - 是java环境,通过JNI调用。如果你有一个指针你可能需要像* C_CharArray一样取消引用它。我认为这可能会有用。