在原生C++ JNI中实现Java类型数组的方法如下:
#include <jni.h>
JNIEXPORT void JNICALL Java_com_example_MyClass_myMethod(JNIEnv *env, jobject obj, jintArray array) {
// 获取数组长度
jint length = env->GetArrayLength(array);
// 获取数组元素
jint* elements = env->GetIntArrayElements(array, NULL);
// 处理数组元素
for (int i = 0; i < length; i++) {
// 处理元素 elements[i]
}
// 释放数组元素
env->ReleaseIntArrayElements(array, elements, 0);
}
public class MyClass {
public native void myMethod(int[] array);
static {
System.loadLibrary("mylibrary");
}
public static void main(String[] args) {
MyClass myClass = new MyClass();
int[] array = {1, 2, 3, 4, 5};
myClass.myMethod(array);
}
}
javac MyClass.java
javah -jni MyClass
#include <jni.h>
JNIEXPORT void JNICALL Java_com_example_MyClass_myMethod(JNIEnv *env, jobject obj, jintArray array) {
// 获取数组长度
jint length = env->GetArrayLength(array);
// 获取数组元素
jint* elements = env->GetIntArrayElements(array, NULL);
// 处理数组元素
for (int i = 0; i < length; i++) {
// 处理元素 elements[i]
}
// 释放数组元素
env->ReleaseIntArrayElements(array, elements, 0);
}
g++ -shared -o mylibrary.so -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" MyClass.cpp
public class MyClass {
public native void myMethod(int[] array);
static {
System.loadLibrary("mylibrary");
}
public static void main(String[] args) {
MyClass myClass = new MyClass();
int[] array = {1, 2, 3, 4, 5};
myClass.myMethod(array);
}
}
通过以上步骤,就可以在原生C++ JNI中实现Java类型数组的操作。在C++代码中,使用JNI函数获取Java数组的元素和长度,然后进行相应的处理。在Java代码中,使用JNI函数调用C++代码并传递Java数组。
领取专属 10元无门槛券
手把手带您无忧上云