在 Java 层传递一个 short 数组到 native 层,并在 native 层给它赋值,可以按照以下步骤进行编写:

  1. 在 Java 层定义一个 native 方法,用于将 short 数组传递给 native 层:
public class NativeClass {
    public native void assignShortArray(short[] array);
}
  1. 在 C/C++ 的 native 层实现该方法,并在该方法中给 short 数组赋值:
#include <jni.h>

JNIEXPORT void JNICALL Java_NativeClass_assignShortArray(JNIEnv* env, jobject obj, jshortArray array) {
    // 获取 short 数组的长度
    jsize length = env->GetArrayLength(array);

    // 获取 short 数组的指针
    jshort* elements = env->GetShortArrayElements(array, NULL);

    // 给 short 数组赋值
    for (jsize i = 0; i < length; i++) {
        elements[i] = i; // 设置数组元素的值为索引值
    }

    // 释放 short 数组的指针
    env->ReleaseShortArrayElements(array, elements, 0);
}
  1. 编译生成动态链接库文件(例如:libnative.so):
$ gcc -shared -o libnative.so -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" NativeClass.cpp
  1. 在 Java 层调用 native 方法并传递 short 数组:
public class MainClass {
    public static void main(String[] args) {
        NativeClass nativeObj = new NativeClass();
        short[] array = new short[10];
        
        nativeObj.assignShortArray(array);
        
        // 打印 short 数组的值
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}

当运行主类 MainClass 时,会调用 native 方法 assignShortArray() 将 short 数组传递给 native 层,并在 native 层给数组赋值。然后在 Java 层打印数组的值,即可看到数组中的每个元素已被赋予了索引值


原文地址: https://www.cveoy.top/t/topic/iHDG 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录