Jni :三维数组处理方法 ,以整形三维数组为例 C++实现
本文原创,转载请注明地址:http://www.cnblogs.com/baokang/p/4982846.html
关于Jni的基本使用方法,请参阅:Java 调用 C++ (Java 调用 dll)康哥手把手教你
关于Jni的调试,请参阅:Jni 调试 : eclipse + Vs 联合调试
不废话了,直接上代码
1.java native 接口
/**
* 将三维数组src中的每一个元素平方,dst进行输出
* @param src 输入
* @param dst 输出
*/
public native static void calThreeDimensional(int[][][] src,int[][][] dst);
2.Jni 接口实现
/*
* Class: com_bk_jnidemo_JniDemo
* Method: calThreeDimensional
* Signature: ([[[I[[[I)V
*/
JNIEXPORT void JNICALL Java_com_bk_jnidemo_JniDemo_calThreeDimensional(JNIEnv *env, jclass cls, jobjectArray src, jobjectArray dst)
{
int x,y,z;
jobjectArray src_xy,dst_xy;
jintArray src_x,dst_x;
jint temp;
jint *xSrcValues;
jint *xDstValues; /*------------------------获取x,y,z三个维度数-----------------------*/
src_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(src,0));
dst_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(dst,0)); src_x=static_cast<jintArray>(env->GetObjectArrayElement(src_xy,0));
dst_x=static_cast<jintArray>(env->GetObjectArrayElement(dst_xy,0)); z=env->GetArrayLength(src);
y=env->GetArrayLength(src_xy);
x=env->GetArrayLength(src_x); /*------------------------三层循环处理-----------------------------*/
for(int i=0;i<z;i++)
{
src_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(src,i));
dst_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(dst,i)); for(int j=0;j<y;j++)
{
src_x=static_cast<jintArray>(env->GetObjectArrayElement(src_xy,j));
dst_x=static_cast<jintArray>(env->GetObjectArrayElement(dst_xy,j)); xSrcValues=env->GetIntArrayElements(src_x,NULL);
xDstValues=env->GetIntArrayElements(dst_x,NULL);
for(int k=0;k<x;k++)
{
/*--------此处进行单个元素处理----------*/
xDstValues[k]=xSrcValues[k]*xSrcValues[k];
}
/*-------------------数据写回:x层---------------------*/
env->ReleaseIntArrayElements(src_x,xSrcValues,JNI_ABORT);
env->ReleaseIntArrayElements(dst_x,xDstValues,0); /*----------------数据写回:y层----------*/
env->SetObjectArrayElement(dst_xy,j,dst_x);
}
/*---------------数据写回:z层---------*/
env->SetObjectArrayElement(dst,i,dst_xy);
}
}
Jni :三维数组处理方法 ,以整形三维数组为例 C++实现的更多相关文章
- JavaScript数组对象方法
数组的方法:首先,数组的方法有数组原型方法,也有从object对象继承来的方法.这里只详细说明一下数组的原型方法. (1)join:把数组中的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. 例 ...
- JavaScript ES6 数组新方法 学习随笔
JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...
- js类数组转数组的方法(ArrayLike)
1. 什么是类数组ArrayLike(类数组 就是一个普通的 js对象) 类数组对象必须含有 length 属性,且元素属性名必须是数值或者可转换为数值的字符. 类数组对象不是数组对象,所以没有数 ...
- 科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)
Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...
- .net学习之.net和C#关系、运行过程、数据类型、类型转换、值类型和引用类型、数组以及方法参数等
1..net 和 C# 的关系.net 是一个平台,C#是种语言,C#语言可以通过.net平台来编写.部署.运行.net应用程序,C#通过.net平台开发.net应用程序2..net平台的重要组成FC ...
- php中定义数组的方法
1.PHP定义数组的格式 数组名=array(); 如:$aa=array();//这样就定义了一个数组, 之后给元素赋值: $aa[0]="9016"; $aa[1]=" ...
- 我能考虑到的数组(老)方法就这些了(es5)
代码注释都写的很清楚了 关键字:斐波那契数组.二维数组.多维数组(矩阵)... <!DOCTYPE html> <html lang="en"> <h ...
- [Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法
前面有几条都讲过关于Array.prototype的标准方法.这些标准方法被设计成其他对象可复用的方法,即使这些对象并没有继承Array. arguments对象 在22条中提到的函数argument ...
- JNI动态注册native方法及JNI数据使用
前言 或许你知道了jni的简单调用,其实不算什么百度谷歌一大把,虽然这些jni绝大多数情况下都不会让我们安卓工程师来弄,毕竟还是有点难,但是我们还是得打破砂锅知道为什么这样干吧,至少也让我们知道调用流 ...
随机推荐
- [LeetCode] Largest BST Subtree 最大的二分搜索子树
Given a binary tree, find the largest subtree which is a Binary Search Tree (BST), where largest mea ...
- [LeetCode] Word Pattern II 词语模式之二
Given a pattern and a string str, find if str follows the same pattern. Here follow means a full mat ...
- [LeetCode] Largest Rectangle in Histogram 直方图中最大的矩形
Given n non-negative integers representing the histogram's bar height where the width of each bar is ...
- SQLite3源程序分析之查询处理及优化
前言 查询处理及优化是关系数据库得以流行的根本原因,也是关系数据库系统最核心的技术之一.SQLite的查询处理模块很精致,而且很容易移植到不支持SQL的存储引擎(Berkeley DB最新的版本已经将 ...
- 关于delphi7的四舍五入
round 函数是银行用的 采用了 四舍六入5留偶 网上找到了个实现方法 先乘1000,用Trunc取整,除10取余,余数再取整,如果大于5,进位,小于5不进位. 函数就好写了 现在只写一个保留两 ...
- BZOJ 3489: A simple rmq problem
3489: A simple rmq problem Time Limit: 40 Sec Memory Limit: 600 MBSubmit: 1594 Solved: 520[Submit] ...
- sql 单个字段去重查询 distinc 和 group by的效率问题
sql 查询 distinc用法 distinct 和group by都需要排序,一样的结果集从执行计划的成本代价来看差距不大,但group by 还涉及到统计,所以应该需要准备工作.所以单纯从等价结 ...
- Linux CentOS6.x ip设置(网卡设置)
修改IP永久生效按以下方法vi /etc/sysconfig/network-scripts/ifcfg-eth0(eth0,第一块网卡,如果是第二块则为eth1)按如下修改ip: DEVICE=et ...
- 实例1-gettree
-- zx create PROCEDURE getbomtree @MaterialID INT --参数,父节点的id AS BEGIN -- 如果主BOM禁用,不显示树结构 ) BEGIN RE ...
- python httplib get和post获取数据
httplib 下的 status http请求的状态 200 404 500... reason 返回答复 OK或者 FAULRE read() 读取内容 get方法: #!/usr/bin/e ...