本文原创,转载请注明地址: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. 封装的ajax

    function ajax(method,url,data,success){ if(window.XMLHttpRequest) { // IE7+, Firefox, Chrome, Opera, ...

  2. [LeetCode] Insertion Sort List 链表插入排序

    Sort a linked list using insertion sort. 链表的插入排序实现原理很简单,就是一个元素一个元素的从原链表中取出来,然后按顺序插入到新链表中,时间复杂度为O(n2) ...

  3. .NET跨平台之旅:将示例站点升级至ASP.NET Core 1.0

    北京时间6月28日凌晨,微软发布了 .NET Core 1.0,详见新闻 .NET Core 1.0 正式发布了 ,ASP.NET Core 1.0 也随之一起发布了. 紧跟这次发布,我们将跑在 Li ...

  4. 使用SVG图像作为loading加载 以保证图像高清不模糊

    使用教程 接下来设计达人网小编为大家讲解这个使用方法,其实是相当简单的. STEP 1: 复制你想要的SVG加载动画代码到<body>里面,小编随意复制一个代码如下:<svg ver ...

  5. Azure IaaS限制

    每个云服务最多运行 50 个虚机 每个云服务最多有 150 个输入 endpoints

  6. Android 和 H5 通信

    有需要与h5通信的需求,写了一个helper类,处理与h5通信. import android.content.Context; import android.os.Handler; import a ...

  7. 微博轻量级RPC框架Motan

    Motan 是微博技术团队研发的基于 Java 的轻量级 RPC 框架,已在微博内部大规模应用多年,每天稳定支撑微博上亿次的内部调用.Motan 基于微博的高并发和高负载场景优化,成为一套简单.易用. ...

  8. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  9. Pi 前2600位

    3.14 15926 53589 79323 84626 43383 27950 28841 97169 39937 51058 2097 4944 5 92307 81640 62862 0899 ...

  10. 推荐一款Mac上好用的Markdown编辑器

    [TOC] 推荐一款Mac上好用的Markdown编辑器 正文 我算是一位Evernote的重度用户吧.之前也尝试过为知笔记,有道云笔记,微软的onenote,最后还是觉的Evernote.因为我喜欢 ...