news 2026/4/16 4:31:05

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/4/16 3:23:40

非Spring的普通类,如何引入 Spring服务的变量?

非 Spring 的普通类调用 Spring 的类 如果是在同一个模块中,那可以通过 实现 ApplicationContextAware 接口处理。 详情见: https://blog.csdn.net/sinat_32502451/article/details/155955824 非 Spring 的普通类调用 Spring 的类,并且不在同…

作者头像 李华
网站建设 2026/4/15 21:46:28

Applite:终极Mac软件管理神器,告别命令行烦恼

还在为复杂的Homebrew命令而头疼吗?Applite这款免费的macOS图形界面工具,让软件管理变得前所未有的简单直观。通过友好的界面设计,Applite将繁琐的命令行操作转化为轻松的点击体验,让每位Mac用户都能轻松管理自己的应用程序。 【免…

作者头像 李华
网站建设 2026/4/15 23:23:17

PyTorch安装踩坑总结:为Qwen-Image-Edit-2509搭建稳定运行环境

PyTorch安装踩坑总结:为Qwen-Image-Edit-2509搭建稳定运行环境 在尝试部署一个能用自然语言编辑图像的AI模型时,你有没有经历过这样的场景:满怀期待地克隆完项目代码,刚准备运行python app.py,终端却无情地抛出一连串…

作者头像 李华
网站建设 2026/4/12 15:07:54

还在用低效AI写论文?6款神器让AI率从78%降至13%,轻松过查重!

一、你正在踩的AI论文写作坑:低效、高风险、被导师Diss的噩梦 还在用ChatGPT写论文却被导师批“满篇AI味”?还在为查重率30%熬夜改到凌晨三点?还在因为AI写的内容逻辑断裂、数据错误被拒稿延迟毕业?如果你中了其中任何一条&#…

作者头像 李华
网站建设 2026/4/14 6:41:39

百度搜索不到Qwen-Image?教你从HuggingFace镜像网站快速获取

百度搜索不到Qwen-Image?教你从HuggingFace镜像网站快速获取 在AIGC(生成式人工智能)席卷内容创作、广告设计和数字媒体的今天,文生图模型早已不再是“能画画就行”的玩具工具。越来越多的企业与开发者开始追求高精度、可编辑、多…

作者头像 李华
网站建设 2026/4/10 10:52:21

3步解决电子书管理难题:Koodo Reader高效阅读完全指南

还在为多设备电子书同步烦恼吗?Koodo Reader作为一款现代化的跨平台电子书阅读器,能够完美解决你的阅读需求。无论是Windows、macOS、Linux还是Web端,这款免费开源工具都能提供出色的阅读体验。 【免费下载链接】koodo-reader A modern ebook…

作者头像 李华