当前位置: 首页 > news >正文

详解JNI JNA!

一、JNI(Java Native Interface)

1.1 JNI简介:

  • JNI是Java平台提供的一种编程框架,允许Java代码与C/C++编写的本地库进行交互。
  • JNI是属于Java的,与Android无直接关系。
  • JNI是Java与C/C++代码间交互的桥梁。

1.2 JNI核心思想:

  1. 在Java中声明一个Native方法;
  2. 使用Java命令根据该声明生成一个C/C++头文件;
  3. 根据头文件,用C/C++实现对应的函数;
  4. 将C/C++代码编译成动态链接库(Windows的.dll,Linux的.so)。

1.3 JNI与NDK的关系:

  • JNI  随着  JDK  先出现——1995年;Android——2012年
  • NDK是一个工具集,将JDK的JNI进行了二次封装;

1.4 签名规则:

Java的String类型和C/C++的char类型是不同步的,需要通过JNI来进行转换,(待总结

二、JNA(Java Native Access)

2.1 JNA简介:

JNA是一个开源的第三方Java库,无需编写JNI(C/C++代码),提供了Java API供使用,快速开发。

2.2 JNA工作流程:

  1. 将JNA的jar包(jna.jar)添加到项目中。
  2. 创建一个Java接口,继承 com.sun.jna.Library。
  3. 在这个接口中声明方法,方法的签名必须与要调用的原生库中的函数签名完全对应(方法名、参数类型、返回值类型)。JNA提供了大量类(如NativeLibrary,Pointer)来映射C的复杂类型(如指针、结构体)。
import com.sun.jna.Library;
import com.sun.jna.Native;public interface CLibrary extends Library {// 加载C标准库,并映射到INSTANCE实例CLibrary INSTANCE = (CLibrary) Native.load("c", CLibrary.class);// 声明方法,直接对应C的printf函数int printf(String format, Object... args);
}

在Java代码中,直接调用接口中声明的方法。

public class HelloJNA {public static void main(String[] args) {int result = CLibrary.INSTANCE.printf("Hello from JNA!\n");System.out.println("Return value: " + result);}
}

http://www.dtcms.com/a/395574.html

相关文章:

  • C# 获取docx文档页数的古怪方法
  • 算法题(215):奶牛飞盘
  • Ubuntu 安装与使用C++ onnxruntime库
  • Ubuntu 部署 Zabbix 6.0 LTS 监控平台
  • 基于springboot家政、上门服务、Java源码系统功能结构
  • 从 “纸笔清单” 到全栈引擎:数据填报与类 Excel 控件如何重塑企业效率曲线
  • FPGA学习笔记——图像处理之饱和度调节(RGB)
  • MySQL 读写分离详解与 MyCat 实战部署
  • SEU-project1项目调试过程记录
  • STM32H743-结合CubeMX新建HAL库MDK工程
  • [国奖版本!更新完毕]2025华为杯E题数学建模研赛E题研究生数学建模思路代码文章成品:高速列车轴承智能故障诊断问题
  • 【一天一个Web3概念】区块链中的双花问题:概念、案例与防范措施
  • Java 大视界 -- Java 大数据机器学习模型在金融衍生品定价与风险管理中的应用(415)
  • STC15W4K56S4 单片机 PWM 功能详解与配置指南
  • 秋招冲刺!AI面试如何破解企业招聘难题?
  • MySQL脚本转换为StarRocks完整指南
  • Mysql常见sql语句优化
  • CPU性能优化指南:让处理器火力全开
  • 火山PromptPilot ,支持api sdk构建AI应用开发
  • 使用Rax构建小程序项目踩坑记录
  • Vue自定义滚动条的实现
  • 【鸿蒙面试题-7】鸿蒙与web混合开发
  • 基于Java语言的搭子小程序_搭子APP平台
  • implements Serializable作用和原理
  • valkey9.0之HFE
  • 基于C#的湿度上位机实现方案
  • 汽车电子模块缩写
  • 随机裁剪 vs. 中心裁剪:深度学习中图像预处理的核心技术解析
  • 四大金刚之计算机网络
  • 划重点|云栖大会「AI 原生应用架构论坛」看点梳理