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

【JNI】数组的基本使用

在上一期讲了基本类型的基本使用,这期来说一说数组的基本使用

HelloJNI.java:实现myArray函数,把一个整型数组转换为双精度型数组

public class HelloJNI { static {System.loadLibrary("hello"); }private native String HelloWorld();private native double avg(int n1, int n2);private static native double[] myArray(int[] arr);public static void main(String[] args) {System.out.println(new HelloJNI().HelloWorld());System.out.println(new HelloJNI().avg(8,3));int[] arr={6,4,3,2,11};double[] ans=myArray(arr);for (double i : ans) {System.out.println(i*2);}}}

生成HelloJNI.h

/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloJNI */#ifndef _Included_HelloJNI
#define _Included_HelloJNI
#ifdef __cplusplus
extern "C" {
#endif
/** Class:     HelloJNI* Method:    HelloWorld* Signature: ()Ljava/lang/String;*/
JNIEXPORT jstring JNICALL Java_HelloJNI_HelloWorld(JNIEnv *, jobject);/** Class:     HelloJNI* Method:    avg* Signature: (II)D*/
JNIEXPORT jdouble JNICALL Java_HelloJNI_avg(JNIEnv *, jobject, jint, jint);/** Class:     HelloJNI* Method:    myArray* Signature: ([I)[D*/
JNIEXPORT jdoubleArray JNICALL Java_HelloJNI_myArray(JNIEnv *, jclass, jintArray);#ifdef __cplusplus
}
#endif
#endif

然后在HelloJNI.cpp中实现相应函数:

#include "HelloJNI.h"
#include <iostream>
#include <jni.h>
using namespace std;JNIEXPORT jstring JNICALL Java_HelloJNI_HelloWorld(JNIEnv *env, jobject obj){return env->NewStringUTF("JNI, hello world!");
} JNIEXPORT jdouble JNICALL Java_HelloJNI_avg(JNIEnv *env, jobject obj, jint a, jint b){return ((jdouble)a+b)/2;
}JNIEXPORT jdoubleArray JNICALL Java_HelloJNI_myArray(JNIEnv *env, jclass obj, jintArray arr){// 获取Java整数数组的长度  jsize len = env->GetArrayLength(arr);  // 创建一个新的Java双精度浮点数数组  jdoubleArray result = env->NewDoubleArray(len);  if (result == nullptr) {  return nullptr; // 内存分配失败,返回null  }  // 获取Java整数数组的元素  jint *intElements = env->GetIntArrayElements(arr, nullptr);  if (intElements == nullptr) {  return nullptr; // 内存分配失败,返回null }  // 设置Java双精度浮点数数组的元素  jdouble *doubleElements = env->GetDoubleArrayElements(result, nullptr);  if (doubleElements == nullptr) {  env->ReleaseIntArrayElements(arr, intElements, 0); // 释放整数数组元素  return nullptr; // 内存分配失败,返回null(应该处理异常,但这里简化了)  }  // 执行转换  for (jsize i = 0; i < len; i++) {  doubleElements[i] = intElements[i]; }  // 释放数组元素 env->ReleaseDoubleArrayElements(result, doubleElements, 0);  env->ReleaseIntArrayElements(arr, intElements, 0);  // 返回转换后的数组  return result;  
}

编译链接运行:

g++ -fpic -I"$JAVA_HOME/include" -I"$JAVA_HOME/include/linux" -shared -o libhello.so HelloJNI.cpp
java -Djava.library.path=. HelloJNI

结果:

image-20241005194123206

相关文章:

【JNI】数组的基本使用

在上一期讲了基本类型的基本使用&#xff0c;这期来说一说数组的基本使用 HelloJNI.java&#xff1a;实现myArray函数&#xff0c;把一个整型数组转换为双精度型数组 public class HelloJNI { static {System.loadLibrary("hello"); }private native String HelloW…...

React跨平台

React的跨平台应用开发详解如下&#xff1a; 一、跨平台能力 React本身是一个用于构建用户界面的JavaScript库&#xff0c;但它通过React Native等框架实现了跨平台应用开发的能力。React Native允许开发者使用JavaScript和React来编写原生应用&#xff0c;这些应用可以在iOS和…...

如何在 SQL 中更新表中的记录?

当你需要修改数据库中已存在的数据时&#xff0c;UPDATE 语句是你的首选工具。 这允许你更改表中一条或多条记录的特定字段值。 下面我将详细介绍如何使用 UPDATE 语句&#xff0c;并提供一些开发建议和注意事项。 基础用法 假设我们有一个名为 employees 的表&#xff0c;…...

宠物饮水机的水箱低液位提醒如何实现?

ICMAN液位检测芯片轻松实现宠物饮水机的水箱低液位提醒功能&#xff01; 工作原理 &#xff1a; 基于双通道电容式单点液位检测原理 方案特点&#xff1a; 液位检测精度高达1mm&#xff0c;超强抗干扰&#xff0c;动态CS 10V 为家用电器水位提醒的应用提供了一种简单而又有…...

EXCEL_光标百分比

Public Sub InitCells()Dim iSheet As LongFor iSheet Sheets.Count To 1 Step -1Sheets(iSheet).ActivateActiveWindow.Zoom 85ActiveWindow.ScrollRow 1ActiveWindow.ScrollColumn 1Sheets(iSheet).Range("A1").ActivateNext iSheetEnd Sub对日项目中的文档满天…...

(一)Web 网站服务之 Apache

一、Apache 的作用和特点 作用&#xff1a;Apache 是一款开源的网站服务器端软件&#xff0c;为网站的运行提供了稳定的基础。特点&#xff1a; 开源免费&#xff1a;这使得任何人都可以免费使用和修改它。模块化设计&#xff1a;具有高度的灵活性&#xff0c;可以根据需求选择…...

英语词汇小程序小程序|英语词汇小程序系统|基于java的四六级词汇小程序设计与实现(源码+数据库+文档)

英语词汇小程序 目录 基于java的四六级词汇小程序设计与实现 一、前言 二、系统功能设计 三、系统实现 四、数据库设计 1、实体ER图 五、核心代码 六、论文参考 七、最新计算机毕设选题推荐 八、源码获取&#xff1a; 博主介绍&#xff1a;✌️大厂码农|毕设布道师&a…...

AI学习指南深度学习篇-学习率衰减的实现机制

AI学习指南深度学习篇-学习率衰减的实现机制 前言 在深度学习中&#xff0c;学习率是影响模型训练的重要超参数之一。合理的学习率设置不仅可以加速模型收敛&#xff0c;还可以避免训练过程中出现各种问题&#xff0c;如过拟合或训练不收敛。学习率衰减是一种动态调整学习率的…...

My_qsort() -自己写的 qsort 函数

2024 - 10 - 05 - 笔记 - 21 作者(Author)&#xff1a;郑龙浩 / 仟濹(网名) My_qsort()- 自己写的qsort函数 My_qsort为自己写的qsort函数&#xff0c;但是采用的不是快速排序&#xff0c;而是冒泡排序&#xff0c;是为了模仿qsort函数而尝试写出来的函数。 思路&#xff1a…...

《向量数据库指南》——Mlivus Cloud打造生产级AI应用利器

哈哈,各位向量数据库和AI应用领域的朋友们,大家好!我是大禹智库的向量数据库高级研究员王帅旭,也是《向量数据库指南》的作者。今天,我要和大家聊聊如何使用Mlivus Cloud来搭建生产级AI应用。这可是个热门话题哦,相信大家都非常感兴趣! 《向量数据库指南》 使用Mlivus …...

Electron 进程通信

预加载&#xff08;preload&#xff09;脚本只能访问部分 Node.js API&#xff0c;但是主进程可以访问全部API。此时&#xff0c;需要使用进程通信。 比如&#xff0c;在preload.js中&#xff0c;不能访问__dirname&#xff0c;不能使用 Node 中的 fs 模块&#xff0c;但主进程…...

Kubernetes资源详解

华子目录 1.Kubernetes中的资源1.1资源管理介绍1.2资源管理方式1.2.1命令式对象管理1.2.2kubectl常见command命令1.2.3资源类型1.2.4常用资源类型 基本命令示例运行和调试命令示例高级命令示例总结 其他命令示例create和apply区别案例显示命名空间查看命名空间中的pod如何对外暴…...

C++11之线程

编译环境&#xff1a;Qt join&#xff1a;阻塞当前线程&#xff0c;直到线程函数退出 detach&#xff1a;将线程对象与线程函数分离&#xff0c;线程不依赖线程对象管理 注&#xff1a;join和detach两者必选其一&#xff0c;否则线程对象的回收会影响线程的回收&#xff0c;导致…...

界星空科技漆包线行业称重系统

万界星空科技为漆包线行业提供的称重系统是其MES制造执行系统解决方案中的一个重要组成部分。以下是对该系统的详细介绍&#xff1a; 一、系统概述 万界星空科技漆包线行业称重系统&#xff0c;是集成在MES系统中的一个功能模块&#xff0c;专门用于漆包线生产过程中的重量检…...

RabbitMQ的高级特性-事务

事务&#xff1a;RabbitMQ是基于AMQP协议实现的, 该协议实现了事务机制, 因此RabbitMQ也⽀持事务机制. SpringAMQP也提供了对事务相关的操作. RabbitMQ事务允许开发者确保消息的发送和接收是原⼦性的, 要么全部成功, 要么全部失败 配置事务管理器&#xff1a; Bean public Ra…...

Qt Linguist手册

概述 Qt 为将 Qt C 和 Qt Quick 应用程序翻译成当地语言提供了出色的支持。发布经理、翻译和开发人员可以使用 Qt 工具来完成他们的任务。 发布经理对应用程序的发布负总责。通常&#xff0c;他们负责协调开发人员和翻译人员的工作。他们可以使用 lupdate 工具同步源代码和翻…...

【简介Sentinel-1】

Sentinel-1是欧洲航天局哥白尼计划&#xff08;GMES&#xff09;中的地球观测卫星&#xff0c;由Sentinel-1A和Sentinel-1B两颗卫星组成。以下是对Sentinel-1的详细介绍&#xff1a; 一、基本信息 卫星名称&#xff1a;Sentinel-1 所属计划&#xff1a;欧洲航天局哥白尼计划…...

第 17 场小白入门赛蓝桥杯

第 17 场小白入门赛 2 北伐军费 发现每次选大的更优&#xff0c;所以可以排序之后&#xff0c;先手取右边&#xff0c;后手取左边。 实际发现&#xff0c;对于 A − B A-B A−B 的结果来说&#xff0c;后手对于这个式子的贡献是 − − a i --a_i −−ai​ &#xff0c;也就…...

@antv/x6 导出图片下载,或者导出图片为base64由后端去处理。

1、导出为文件的格式&#xff0c;比如 PNG graph.exportPNG(function (dataURL) {console.log(dataURL);let img document.getElementById(img) as HTMLImageElement;img.src dataURL;},{backgroundColor: #fff,padding: [20, 20, 20, 20],quality: 1,width: graph.options.w…...

从零到精通:AI大模型的全方位学习路径解析,非常详细收藏我这一篇就够了

一、初聊大模型 1、什么是大模型&#xff1f; 大模型&#xff0c;通常指的是在人工智能领域中的大型预训练模型。你可以把它们想象成非常聪明的大脑&#xff0c;这些大脑通过阅读大量的文本、图片、声音等信息&#xff0c;学习到了世界的知识。这些大脑&#xff08;模型&…...

RK3562核心板选型与开发实战:从硬件拆解到软件适配

1. 项目概述&#xff1a;为什么是PET_RK3562_CORE&#xff1f; 在嵌入式开发领域&#xff0c;尤其是智能硬件和物联网设备的设计中&#xff0c;核心板的选择往往是决定项目成败、成本控制和技术路线的关键一步。最近几年&#xff0c;基于ARM架构的国产化芯片方案异军突起&#…...

告别假进度条!UE5蓝图实战:用自定义AssetManager实现真实关卡加载进度

UE5蓝图实战&#xff1a;打造真实关卡加载进度系统 在虚幻引擎5&#xff08;UE5&#xff09;游戏开发中&#xff0c;流畅的关卡加载体验对玩家沉浸感至关重要。许多开发者会遇到"假进度条"问题——进度条看似在动&#xff0c;实则与真实加载进度无关。本文将手把手教…...

ASML财报解读:高毛利与利润倍增背后的光刻机技术垄断与市场逻辑

1. 财报核心数据深度解读&#xff1a;高毛利与利润倍增的背后 看到ASML最新发布的Q2财报&#xff0c;最抓人眼球的两个数字无疑是“毛利率超50%”和“每股净利润增长近一倍”。这不仅仅是两个亮眼的财务指标&#xff0c;更是理解这家全球光刻机巨头当前市场地位、技术壁垒和未来…...

深度解析baidupcsapi:Python百度网盘API高级配置与实战指南

深度解析baidupcsapi&#xff1a;Python百度网盘API高级配置与实战指南 【免费下载链接】baidupcsapi 百度网盘api 项目地址: https://gitcode.com/gh_mirrors/ba/baidupcsapi baidupcsapi是一个功能强大的Python百度网盘API库&#xff0c;为开发者提供了完整的百度网盘…...

ncmdumpGUI:解锁网易云音乐ncm加密格式的图形化解决方案

ncmdumpGUI&#xff1a;解锁网易云音乐ncm加密格式的图形化解决方案 【免费下载链接】ncmdumpGUI C#版本网易云音乐ncm文件格式转换&#xff0c;Windows图形界面版本 项目地址: https://gitcode.com/gh_mirrors/nc/ncmdumpGUI 在数字音乐的世界里&#xff0c;格式兼容性…...

中兴光猫终极管理工具:一键开启工厂模式与永久Telnet完全指南

中兴光猫终极管理工具&#xff1a;一键开启工厂模式与永久Telnet完全指南 【免费下载链接】zteOnu A tool that can open ZTE onu device factory mode 项目地址: https://gitcode.com/gh_mirrors/zt/zteOnu zteOnu是一款专为中兴光猫设备设计的开源管理工具&#xff0c…...

企业邮箱迁移技术方案:从旧邮箱平滑迁移至阿里 / 网易 / 谷歌

前言企业发展过程中&#xff0c;更换企业邮箱服务商属于常见运维需求&#xff0c;不少行政与运维人员担心迁移过程出现邮件丢失、通讯录错乱、收发中断等问题。掌握标准化迁移方案&#xff0c;可实现新旧邮箱无缝过渡&#xff0c;不影响日常商务对接与对内办公。本文分享通用迁…...

从双非到科软:我的22408备考复盘与实战指南

1. 双非逆袭科软&#xff1a;我的备考心路历程 作为一名双非院校的计算机专业学生&#xff0c;我深知考研这条路有多难走。去年这个时候&#xff0c;我也和屏幕前的你一样&#xff0c;在知乎、贴吧疯狂搜索各种经验贴&#xff0c;既期待又忐忑。现在回想起来&#xff0c;从3月到…...

中华民族站起来了,《AI驱动上下五千年:从结绳记事到智能纪元》第三章:周礼分封——面向服务的架构(SOA)首次实践

第三章&#xff1a;周礼分封——面向服务的架构&#xff08;SOA&#xff09;首次实践 1.历史现场&#xff1a;周公的架构革命 时间&#xff1a;公元前1046年&#xff0c;周朝建立之初地点&#xff1a;镐京&#xff08;今西安&#xff09;明堂人物&#xff1a;周公旦、各诸侯国君…...

小学期学习记录

第十一周观看了前四个视频&#xff0c;了解了低通滤波器的作用以及进行了仿真。...