news 2026/8/8 9:54:37

Jni常用的代码

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Jni常用的代码

Jni

JNI(Java Native Interface,Java 本地接口) 是 Java 平台提供的一种编程框架,它允许 Java 代码与用其他语言(主要是 C/C++)编写的本地代码进行交互。简单说,JNI 是 Java 调用本地代码的桥梁。

Jni 需要用到一些 C语言的代码。

C语言结构体

C语言结构体类似java的类,只是没有方法(函数)。

数组初始化:

  • 定义好数组长度后,就可以用:{0} 将所有元素初始化:
// 所有元素初始化为0 jint localArray[10] = {0};

字节数组 jbyteArray 转换为结构体:

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 *)&param);

结构体转化为 字节数组 jbyteArray :

int32_t resultLen = sizeof(struct_data_t); jbyteArray array = (*env)->NewByteArray(env, resultLen); (*env)->SetByteArrayRegion(env, array, 0, resultLen, (const jbyte *)&structData);

数组转换为 jbyteArray:

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);

jbyteArray 转化为结构体数组:

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); }

free 释放内存:

使用过 malloc 分配内存,最后记得用 free释放。

// 释放内存 free(param_array);
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/7 22:17:24

终极轨道计算指南:3个实战技巧解析

终极轨道计算指南:3个实战技巧解析 【免费下载链接】sgp4 Simplified perturbations models 项目地址: https://gitcode.com/gh_mirrors/sg/sgp4 轨道计算是航天工程中至关重要的基础技术,它能够精确预测卫星在太空中的位置和运动轨迹。SGP4&…

作者头像 李华
网站建设 2026/8/7 7:18:04

时区相关的问题,开发如何自测?

时区相关的问题,开发如何自测? 在java服务启动时,通过 Intellij Idea 的 Vm Option 加上启动参数。。 比如 -Duser.timezoneUTC , 就可以指定时区为标准的 UTC 0时区。 通过这些启动参数,开发就可以直接在本地自测时区…

作者头像 李华
网站建设 2026/8/7 15:29:25

城通网盘直链解析神器:三步解锁高速下载新体验

城通网盘直链解析神器:三步解锁高速下载新体验 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 还在为城通网盘繁琐的下载流程而烦恼吗?城通网盘直链解析工具正是你需要的解决方案…

作者头像 李华
网站建设 2026/8/7 22:17:27

21届智能车赛外延创意:用车载语音指令触发ACE-Step音乐生成

智能车赛外延创意:用车载语音指令触发ACE-Step音乐生成 在一辆飞驰的智能汽车中,驾驶员轻声说了一句:“来点轻松的爵士乐,带点萨克斯,像深夜电台那样。”话音刚落,车内音响便流淌出一段即兴创作的原创旋律—…

作者头像 李华
网站建设 2026/8/7 15:34:43

2025年8款AI论文生成器大揭秘,一键极速写超长篇论文,效率提升300%!

在毕业季与科研申报高峰的双重压力下,大学生、研究生、科研人员最怕的不是课题难,而是写不完、写不好、改到崩溃。好消息是,2025年的AI论文工具已进化到能让你喝杯咖啡的时间,就拿到一篇高质量初稿,不仅轻松搞定万字长…

作者头像 李华
网站建设 2026/8/7 16:06:38

还在用留AIGC痕迹的AI写论文?7款免费工具知网维普查重过

还在用那些会留下明显“AI味”的工具生搬硬套论文大纲?还在为查重报告上刺眼的红色和飙升的“AI生成概率”而彻夜难眠?还在被导师一句“逻辑不通、语言生硬”的评语打回原稿,陷入无限修改的绝望循环? 如果你对以上任何一个问题疯…

作者头像 李华