本文原创,转载请注明地址: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++实现的更多相关文章

  1. JavaScript数组对象方法

    数组的方法:首先,数组的方法有数组原型方法,也有从object对象继承来的方法.这里只详细说明一下数组的原型方法. (1)join:把数组中的所有元素放入一个字符串.元素通过指定的分隔符进行分隔. 例 ...

  2. JavaScript ES6 数组新方法 学习随笔

    JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...

  3. js类数组转数组的方法(ArrayLike)

    1. 什么是类数组ArrayLike(类数组  就是一个普通的  js对象) 类数组对象必须含有 length 属性,且元素属性名必须是数值或者可转换为数值的字符. 类数组对象不是数组对象,所以没有数 ...

  4. 科学计算三维可视化---Mlab基础(基于Numpy数组的绘图函数)

    Mlab了解 Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化. 过程为: .建立数据源 .使用Filter( ...

  5. .net学习之.net和C#关系、运行过程、数据类型、类型转换、值类型和引用类型、数组以及方法参数等

    1..net 和 C# 的关系.net 是一个平台,C#是种语言,C#语言可以通过.net平台来编写.部署.运行.net应用程序,C#通过.net平台开发.net应用程序2..net平台的重要组成FC ...

  6. php中定义数组的方法

    1.PHP定义数组的格式 数组名=array(); 如:$aa=array();//这样就定义了一个数组, 之后给元素赋值: $aa[0]="9016"; $aa[1]=" ...

  7. 我能考虑到的数组(老)方法就这些了(es5)

    代码注释都写的很清楚了 关键字:斐波那契数组.二维数组.多维数组(矩阵)... <!DOCTYPE html> <html lang="en"> <h ...

  8. [Effective JavaScript 笔记]第51条:在类数组对象上复用通用的数组方法

    前面有几条都讲过关于Array.prototype的标准方法.这些标准方法被设计成其他对象可复用的方法,即使这些对象并没有继承Array. arguments对象 在22条中提到的函数argument ...

  9. JNI动态注册native方法及JNI数据使用

    前言 或许你知道了jni的简单调用,其实不算什么百度谷歌一大把,虽然这些jni绝大多数情况下都不会让我们安卓工程师来弄,毕竟还是有点难,但是我们还是得打破砂锅知道为什么这样干吧,至少也让我们知道调用流 ...

随机推荐

  1. 解读ASP.NET 5 & MVC6系列(13):TagHelper

    在新版的MVC6中,微软提供了强大的TagHelper功能,以便让我们摆脱如下的臃肿代码: @Html.LabelFor(model => model.FullName) @Html.EditF ...

  2. 解读ASP.NET 5 & MVC6系列(8):Session与Caching

    在之前的版本中,Session存在于System.Web中,新版ASP.NET 5中由于不在依赖于System.Web.dll库了,所以相应的,Session也就成了ASP.NET 5中一个可配置的模 ...

  3. 将HTML5封装成android应用APK文件的几种方法

    越来越多的开发者热衷于使用html5+JavaScript开发移动Web App.不过,HTML5 Web APP的出现能否在未来取代移动应用,就目前来说,还是个未知数.一方面,用户在使用习惯上,不喜 ...

  4. C#文件目录操作完全手册

    需要 using System.IO; 1) 相对路径转绝对路径string fullfolder = HttpContext.Current.Server.MapPath(folder); 2) 文 ...

  5. 抱歉!15:44-16:39阿里云RDS故障造成全站不能正常访问

    非常非常抱歉!2016年3月7日15:44-16:39,由于阿里云RDS(云数据库)故障,造成全站不能正常访问,给您带来了很大很大的麻烦,恳请您的谅解! 故障是在15:44开始出现的,应用日志中出现大 ...

  6. Pairwise Sum and Divide 51nod

      1305 Pairwise Sum and Divide 题目来源: HackerRank 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题  收藏  关注 有这样 ...

  7. 【WPF】WPF 布局

    1.window 类继承自 ContentControl 所以内部只能有一个元素2.遵循原则:            不应显示的设置元素(控件)尺寸,可以通过设置最大最小尺寸来限制大小         ...

  8. sed awk grep三剑客常用

    sed的常用用法: awk的常用用法: grep的常用用法: 除了列出符合行之外,并且列出后10行. grep -A 10 Exception kzfinance-front.log 除了列出符合行之 ...

  9. shell及脚本2——shell 环境及命令

    一.快捷键.通配符.特殊符号 1. 快捷键 CTRL+C:终止目前的命令 CTRL+D:输入结束,EOF CTRL+M:ENTER CTRL+S:暂停屏幕输出 CTRL+Q:恢复屏幕输出 CTRL+U ...

  10. appium常用方法整理

    1.相对坐标解锁九宫格 应用场景 QQ解锁屏幕如上,可见九个按键在同一个View下面,要实现解锁,用press   moveTo  release  perform方法 实现代码如下: WebElem ...