生成式引擎优化(GEO)技术解析:区域企业AI可见性建设实践
2026/5/27 5:51:07
JNI(Java Native Interface,Java 本地接口) 是 Java 平台提供的一种编程框架,它允许 Java 代码与用其他语言(主要是 C/C++)编写的本地代码进行交互。简单说,JNI 是 Java 调用本地代码的桥梁。
Jni 需要用到一些 C语言的代码。
C语言结构体类似java的类,只是没有方法(函数)。
// 所有元素初始化为0 jint localArray[10] = {0};JNIEXPORT jbyteArray JNICALL Java_com_cf_lib_w4_W4Parser_calcResult( JNIEnv *env, jclass type, jbyteArray byteArrayParam_){ if ((*env)->IsSameObject(env, byteArrayParam_, NULL)) { cy_log("input parameter byteArrayParam_ error\r\n"); return NULL; } int32_t len = (*env)->GetArrayLength(env, byteArrayParam_); int32_t sLen = sizeof(param_t); if (len != sLen) { cy_log("input parameter param_ length error\r\n"); return NULL; } param_t param = {0}; (*env)->GetByteArrayRegion(env, byteArrayParam_, 0, len, (jbyte *)¶m);int32_t resultLen = sizeof(struct_data_t); jbyteArray array = (*env)->NewByteArray(env, resultLen); (*env)->SetByteArrayRegion(env, array, 0, resultLen, (const jbyte *)&structData);JNIEXPORT jbyteArray JNICALL Java_com_cf_lib_w4_abc_W4Parser_calc ( JNIEnv *env, jclass type, jbyteArray param_ ) { // 只计算 param_array 数组部分的大小 int32_t array_size = sizeof(param_array); // 创建字节数组(仅包含 param_array 数据) jbyteArray result = (*env)->NewByteArray(env, array_size); if (result == NULL) { cy_log("Failed to create byte array\r\n"); return NULL; } // 将 param_array 数组数据复制到字节数组 (*env)->SetByteArrayRegion(env, result, 0, array_size, (jbyte *)param_array);JNIEXPORT jbyteArray JNICALL Java_com_cf_lib_w4_abc_W4Parser_calc ( JNIEnv *env, jclass type, jbyteArray param_ ) { if ((*env)->IsSameObject(env, param_, NULL)) { cy_log("input parameter [param_] error\r\n"); return NULL; } int32_t total_len = (*env)->GetArrayLength(env, param_); // 结构体大小 int32_t element_size = sizeof(struct_data_t); // 分配内存存储结构体数组,注意:使用过 malloc 分配内存,最后记得用 free释放。 struct_data_t *param_array = (struct_data_t*)malloc(total_len); if (param_array == NULL) { cy_log("memory allocation failed.\r\n"); return NULL; } // 将Java字节数组转换为结构体数组 (*env)->GetByteArrayRegion(env, param_, 0, total_len, (jbyte *)param_array); // 释放内存 free(param_array); }使用过 malloc 分配内存,最后记得用 free释放。
// 释放内存 free(param_array);