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

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

使用VSCode开发Django指南

使用VSCode开发Django指南 一、概述 Django 是一个高级 Python 框架&#xff0c;专为快速、安全和可扩展的 Web 开发而设计。Django 包含对 URL 路由、页面模板和数据处理的丰富支持。 本文将创建一个简单的 Django 应用&#xff0c;其中包含三个使用通用基本模板的页面。在此…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

ETLCloud可能遇到的问题有哪些?常见坑位解析

数据集成平台ETLCloud&#xff0c;主要用于支持数据的抽取&#xff08;Extract&#xff09;、转换&#xff08;Transform&#xff09;和加载&#xff08;Load&#xff09;过程。提供了一个简洁直观的界面&#xff0c;以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)

🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图&#xff0c;该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序&#xff0c;确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数&#xff0c;分别表示n 和 e 的值&#xff08;1…...

Mac下Android Studio扫描根目录卡死问题记录

环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中&#xff0c;提示一个依赖外部头文件的cpp源文件需要同步&#xff0c;点…...

Python ROS2【机器人中间件框架】 简介

销量过万TEEIS德国护膝夏天用薄款 优惠券冠生园 百花蜂蜜428g 挤压瓶纯蜂蜜巨奇严选 鞋子除臭剂360ml 多芬身体磨砂膏280g健70%-75%酒精消毒棉片湿巾1418cm 80片/袋3袋大包清洁食品用消毒 优惠券AIMORNY52朵红玫瑰永生香皂花同城配送非鲜花七夕情人节生日礼物送女友 热卖妙洁棉…...