Spring Boot JNA 实现调用 DLL文件(清晰明了)

概述

项目需要用到 重采样算法,JAVA 没有现成的,只能通过 JNA 调用 C++ 的 DLL 实现,JNA中,它提供了一个动态的C语言编写的转发器,可以自动实现Java和C的数据类型映射。不再需要编写C动态链接库。

实现需求

根据 一个数组数据,算法根据数组生成多个相邻、相似的点。
案例:
原始数组:

[1,2,3,4,5,6,5,4,3,2,1]

生成10个:

[0.9975707933099867,2.0827107433705034,3.242373563930609,4.227786236390621,5.5680645300875815,5.6819573969217645,4.3206979326831965,3.3497212671714256,2.1727162369435766,1.115611206113079]

生成20个:

[1.0006736067597888,1.6136225699097613,2.0834240705596923,2.6000134251334908,3.2387063724897835,3.8026902204918467,4.232982835368568,4.801594298327119,5.562876758327512,6.0005892018875,5.686344251045411,4.934418414307205,4.317107510714494,3.885808545074988,3.3535095539415303,2.7104608356964937,2.167467521772395,1.7063151122165208,1.1234001156030098,0.45134020733353886]

实现效果

在这里插入图片描述

实践

gredle 或 maven

版本有很多,我用比较旧的,若有不适可以用新的

implementation 'net.java.dev.jna:jna:4.0.0'
<dependency><groupId>net.java.dev.jna</groupId><artifactId>jna</artifactId><version>4.0.0</version>
</dependency>

NasalResamplingService

创建接口并声明方法,方法名与DLL中方法名对应

public interface NasalResamplingService extends Library {/*** @FileName NasalResamplingService.java* @description 重采样算法* @author lanys* @date 2024-4-15 17:14:04* @param srcArray 原始数组* @param desArray 生成后的数组(C++赋值)* @param desArraySize 生成后数组长度* @param srcArraySize 原始数据长度*/void myMatlabResample(double[] srcArray, double[] desArray, double desArraySize, double srcArraySize);}

DllUtils

@Slf4j
public class DllUtils {private NasalResamplingService instance;/** DLL 文件地址 */private final static String path = "文件地址";public DllUtils() {instance = (NasalResamplingService) Native.loadLibrary(path, NasalResamplingService.class);}public double[] resampling(double[] array, Integer extent) {TimeInterval timer = DateUtil.timer();if (array != null && array.length > 0) {double[] desArray = null;if (extent != null) {desArray = new double[extent];} else {desArray = new double[2000];}// 参数一:原始数据数组// 参数二:重采样数组// 参数三:重采样数据长度,固定2000// 参数四:原始数据个数(长度)instance.myMatlabResample(array, desArray, desArray.length, array.length);log.info("[DLL工具-重采样算法]DLL所需时间:{} 毫秒", timer.interval());return desArray;}return null;}/*** @FileName DllUtils.java* @description 关闭DLL释放内存* @author lanys* @date 2024-4-16 11:11:59*/public void dispose() {try {log.info("[DLL工具-释放DLL内存]");// 关闭DLL,防止内存泄漏NativeLibrary instance = NativeLibrary.getInstance(path);instance.dispose();}catch (Exception e){log.error("[DLL工具-释放内存]数据异常:",e);}}
}

Controller(自己写吧,很简单)

DllUtils dllUtils = new DllUtils();
double[] desArray = dllUtils.resampling(resamplingDTO.getSourceArray(), resamplingDTO.getGeneratingLength());
dllUtils.dispose();

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/821506.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

滤波器笔记(杂乱)

线性相位是时间平移&#xff0c;相位不失真 零、基础知识 1、用相量表示正弦量 https://zhuanlan.zhihu.com/p/345546880 https://www.zhihu.com/question/347763932/answer/1103938667 A s i n ( ω t θ ) ⇔ A e j θ ⇔ A ∠ θ Asin(\omega t\theta) {\Leftrightarrow…

地质灾害监测预警系统:科技守护,构筑智能预警屏障

随着全球气候变化和人为活动的加剧&#xff0c;地质灾害频繁发生&#xff0c;给人们的生命财产安全带来了严重威胁。为了降低地质灾害带来的损失&#xff0c;地质灾害监测预警系统应运而生。本文将为您详细介绍地质灾害监测预警系统的原理、功能以及在实际应用中的效果。 一、地…

Eclipse中 Maven安装与配置步骤,2024年最新面试总结

先自我介绍一下&#xff0c;小编浙江大学毕业&#xff0c;去过华为、字节跳动等大厂&#xff0c;目前阿里P7 深知大多数程序员&#xff0c;想要提升技能&#xff0c;往往是自己摸索成长&#xff0c;但自己不成体系的自学效果低效又漫长&#xff0c;而且极易碰到天花板技术停滞…

微软正式发布Copilot for Security

微软公司近日宣布&#xff0c;其备受期待的安全自动化解决方案——Copilot for Security现已全面上市&#xff0c;面向全球用户开放。这一创新工具的推出标志着微软在提升企业安全防护能力方面迈出了重要一步&#xff0c;同时也为安全专业人士提供了强大的支持。 Copilot for …

在vue中发现一个prop新的写法在官方文档没有,查百度不行,还有什么其他方法排查不

先看图&#xff0c;最近在接手一个同事的代码&#xff0c;发现prop有这样的写法&#xff1a; 我自己查了官网&#xff0c;以及百度都没有找到这种写法。这时我灵机一动&#xff0c;想到一个方法&#xff0c;vscode有内置的typesscript&#xff0c;自然有prop类型推断&#xff0…

【零基础入门TypeScript】模块

目录 内部模块 内部模块语法&#xff08;旧&#xff09; 命名空间语法&#xff08;新&#xff09; 两种情况下生成的 JavaScript 是相同的 外部模块 选择模块加载器 定义外部模块 句法 例子 文件&#xff1a;IShape.js 文件&#xff1a;Circle.js 文件&#xff1a;…

Map与Set的模拟实现封装

目录 一. 底层原理 二. 红黑树节点的定义 三. 仿函数封装 四. 基本函数的封装 五. 迭代器的封装 5.1 迭代器的基本定义 5.2 *与->操作 5.3 迭代器的操作 5.3.1 右子树不为空 5.3.2 右子树为空 5.4 迭代器的--操作 5.4.1 当前节点的父节点…

Qt中连接mysql

1、安装mysql&#xff0c;workbench&#xff0c;为mysql添加环境变量 2、安装Qt带src&#xff0c;然后到如下目录&#xff0c;找到mysql.pro(建议做个副本先) http://D:\Qt\Qt5.13.2\5.13.2\Src\qtbase\src\plugins\sqldrivers\mysql mysql.pro 注意路径的 \ / 和双引号的使…

Rust腐蚀服务器修改背景和logo图片操作方法

Rust腐蚀服务器修改背景和logo图片操作方法 大家好我是艾西一个做服务器租用的网络架构师。在我们自己搭建的rust服务器游戏设定以及玩法都是完全按照自己的想法设定的&#xff0c;如果你是一个社区服那么对于进游戏的主页以及Logo肯定会有自己的想法。这个东西可以理解为做一…

stm32实现hid键盘

前面的cubelmx项目配置参考 stm32实现hid鼠标-CSDN博客https://blog.csdn.net/anlog/article/details/137814494?spm1001.2014.3001.5502两个项目的配置完全相同。 代码 引用 键盘代码&#xff1a; 替换hid设备描述符 先屏蔽鼠标设备描述符 替换为键盘设备描述符 修改宏定…

vagrant 安装虚拟机,docker, k8s

第一步&#xff1a;安装虚拟机 1、安装 vagrant 本机是 mac, 但是这一步不影响&#xff0c;找对应操作系统的安装方式就行了。 vagrant 下载地址 brew install vagrant 2、下载 VirtualBox 虚拟机 VirtualBox 下载地址 找到对应系统下载&#xff0c;安装就可以。 尽量把…

stm32f103--按键播放音乐

目录 一、了解一下延时函数 二、准备音频数据表 三、了解一下蜂鸣器 四、音乐奏响原理 &#xff08;1&#xff09;了解一个音调中的更加细致的小声音 &#xff08;2&#xff09;发出一个音调的声音 五、按键发出声音 一、了解一下延时函数 1s1000ms1000000us 如果是1us…

vue-treeselect 的基本使用

vue-treeselect 的基本使用 1. 效果展示2. 安装 插件3. 引入组件4. 代码 1. 效果展示 2. 安装 插件 vue-treeselect是一个树形的下拉菜单&#xff0c;至于到底有多少节点那就要看你的数据源有多少层了&#xff0c;挺方便的。下面这个这个不用多说吧&#xff0c;下载依赖 npm in…

基本模拟概念

目标&#xff1a; 讨论模拟电子技术的基本特性 描述模拟信号 分析信号源 解释放大器的特性 1.1模拟电子学 电子学可以划分成很多的分类来研究。其中最基本的一种分类方式是将信号分成可由 二进制数字表示的数字信号和由连续变化量表示的模拟信号。数字电子学包括所有的算术 和…

MAC安装CocoaPods遇到的错误Failed to build gem native extension.

MAC安装CocoaPods遇到的错误Failed to build gem native extension. 配置flutter环境的时候报错cocoapods不可用 发现已经安装了CocoaPods&#xff0c;但是不能用 重新安装CocaPods sudo gem install cocoapods重新安装报错如下&#xff1a; 安装RVM curl -L https://get.r…

第十一章数据仓库和商务智能10分

【数据仓库-后端&#xff0c;商务智能-前端】 基本算法&#xff1a;关联关系&#xff08;牵手-谈恋爱&#xff09;&#xff0c;集群关系&#xff08;杭州人爱吃酸甜口&#xff09;&#xff0c;决策树&#xff0c;线性回归&#xff0c;贝叶斯&#xff0c;神经网络&#xff0c;时…

为什么说日本茶道源于中国茶文化

茶&#xff0c;始于药&#xff0c;而后为饮茶&#xff0c;始于药&#xff0c;而后为饮。在8世纪的中国&#xff0c;茶就作为一桩雅事而进入一个诗意王国。而日本则在15世纪将其尊崇为一种美的宗教——茶道。 茶道&#xff0c;是在日常染污之间&#xff0c;因由对美的倾慕而建立…

redis五种类型介绍

Redis是一种内存数据存储系统&#xff0c;它支持五种不同的数据类型&#xff1a; 1. String String是Redis中最基本的数据类型&#xff0c;它可以存储任何形式的字符串数据&#xff0c;例如普通的文本字符串&#xff0c;二进制数据或JSON格式的数据。除此之外&#xff0c;还可以…

快手本地生活服务商入驻方法来了!超简单

本地生活市场正如一座蕴藏丰富的金矿&#xff0c;亟待我们去挖掘其潜在的价值。在2023年这个消费市场全面回暖的年份&#xff0c;服务零售行业的增速犹如一匹黑马&#xff0c;远远超过了商品零售。据权威数据显示&#xff0c;服务零售额的增长幅度高达20%&#xff0c;比商品消费…

前端开发框架BootStrap

版权声明 本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl BootStrap概述 Bootstrap是一个开源的前端框架&#xff0c;它由Twitter的设计师和开发者创建并维护。Bootstrap提供了许多现成的Web组件&#xff0c;可帮助开发者快速设计和…