当前位置: 首页 > 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;模型&…...

Qwen3.5-9B惊艳效果:上传物理实验图→识别仪器→生成操作步骤视频脚本

Qwen3.5-9B惊艳效果&#xff1a;上传物理实验图→识别仪器→生成操作步骤视频脚本 1. 模型能力概览 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型&#xff0c;在多模态理解和逻辑推理方面表现出色。这个模型最令人惊艳的能力在于它能够&#xff1a; 准确识别实验仪器&…...

【手把手教学】使用stitch 生成ui图,导入figma,再用codebuddy生成工程代码

目录 一.stich使用 1.1 关键词生成 1.2 生成ui图 1.3 导出figma​编辑 二. codebuddy使用 ​编辑2.1打开figma ​编辑 2.2 复制ui到设计面板 2.3生成工程代码 三. 结语 一.stich使用 stich官网地址 Google Stitch 是 Google Labs 推出的、基于 Gemini 大模型驱动的A…...

AI辅助开发进阶:让快马智能助手帮你设计与优化专业图像处理库

今天想和大家分享一个很实用的开发经验——如何用AI辅助工具来优化和扩展专业图像处理库的开发。最近我在做一个Python图像处理工具库&#xff0c;正好用InsCode(快马)平台的AI功能做了些尝试&#xff0c;效果出乎意料的好。 先说说背景。这个工具库最初只有基础的图片缩放和滤…...

卡尔曼滤波在无人机飞控和机器人SLAM里到底怎么用?一个实例讲透

卡尔曼滤波在无人机飞控中的实战&#xff1a;从IMU-GPS融合到状态估计 1. 无人机状态估计的工程挑战 当你在郊外试飞新组装的四旋翼无人机时&#xff0c;突然发现GPS信号出现波动&#xff0c;而IMU数据也开始漂移。这时飞控系统如何保持稳定的姿态控制&#xff1f;这个看似简单…...

PyTorch 2.8镜像效果实测:Wan2.2-I2V图生视频在4090D上的流畅度表现

PyTorch 2.8镜像效果实测&#xff1a;Wan2.2-I2V图生视频在4090D上的流畅度表现 1. 测试环境与配置 1.1 硬件配置 本次测试使用的是基于RTX 4090D显卡的深度学习工作站&#xff0c;具体配置如下&#xff1a; 显卡&#xff1a;NVIDIA RTX 4090D 24GB显存CPU&#xff1a;10核…...

Mermaid Live Editor终极指南:10个团队协作和项目管理的实用技巧

Mermaid Live Editor终极指南&#xff1a;10个团队协作和项目管理的实用技巧 【免费下载链接】mermaid-live-editor Edit, preview and share mermaid charts/diagrams. New implementation of the live editor. 项目地址: https://gitcode.com/GitHub_Trending/me/mermaid-l…...

AI集成开发工程师的技术实践与转型之路

第一章:技术架构演进与AI融合趋势 1.1 传统开发范式的演进 现代软件开发正经历从单一业务系统向智能化业务系统的转型。传统的.NET技术栈作为企业级应用开发的基石,其技术架构也在不断演进: // 典型的三层架构示例 public class BusinessLogic {private readonly IDataAc…...

2025届学术党必备的十大降重复率神器推荐

Ai论文网站排名&#xff08;开题报告、文献综述、降aigc率、降重综合对比&#xff09; TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 于学术研究范畴之内&#xff0c;论文撰写常常会由于其结构繁杂且格式规范极为严格&#xff0…...

OpCore-Simplify:开源系统硬件适配的技术突破与架构革新

OpCore-Simplify&#xff1a;开源系统硬件适配的技术突破与架构革新 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 在开源系统定制领域&#xff0c;硬…...

知识获取受限?5款开源工具助你合法解锁付费内容

知识获取受限&#xff1f;5款开源工具助你合法解锁付费内容 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 你是否曾在学术研究关键时刻被期刊付费墙阻挡&#xff1f;是否因新闻网站的…...