zoukankan      html  css  js  c++  java
  • 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 接口实现

     1 /*
     2  * Class:     com_bk_jnidemo_JniDemo
     3  * Method:    calThreeDimensional
     4  * Signature: ([[[I[[[I)V
     5  */
     6 JNIEXPORT void JNICALL Java_com_bk_jnidemo_JniDemo_calThreeDimensional(JNIEnv *env, jclass cls, jobjectArray src, jobjectArray dst)
     7 {
     8     int x,y,z;
     9     jobjectArray src_xy,dst_xy;
    10     jintArray src_x,dst_x;
    11     jint temp;
    12     jint *xSrcValues;
    13     jint *xDstValues;
    14 
    15     /*------------------------获取x,y,z三个维度数-----------------------*/
    16     src_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(src,0));
    17     dst_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(dst,0));
    18     
    19     src_x=static_cast<jintArray>(env->GetObjectArrayElement(src_xy,0));
    20     dst_x=static_cast<jintArray>(env->GetObjectArrayElement(dst_xy,0));
    21 
    22     z=env->GetArrayLength(src);    
    23     y=env->GetArrayLength(src_xy);    
    24     x=env->GetArrayLength(src_x);
    25 
    26     /*------------------------三层循环处理-----------------------------*/
    27     for(int i=0;i<z;i++)
    28     {
    29         src_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(src,i));
    30         dst_xy=static_cast<jobjectArray>(env->GetObjectArrayElement(dst,i));
    31 
    32         for(int j=0;j<y;j++)
    33         {
    34             src_x=static_cast<jintArray>(env->GetObjectArrayElement(src_xy,j));
    35             dst_x=static_cast<jintArray>(env->GetObjectArrayElement(dst_xy,j));
    36             
    37             xSrcValues=env->GetIntArrayElements(src_x,NULL);
    38             xDstValues=env->GetIntArrayElements(dst_x,NULL);
    39             for(int k=0;k<x;k++)
    40             {
    41                 /*--------此处进行单个元素处理----------*/
    42                 xDstValues[k]=xSrcValues[k]*xSrcValues[k];
    43             }
    44             /*-------------------数据写回:x层---------------------*/
    45             env->ReleaseIntArrayElements(src_x,xSrcValues,JNI_ABORT);            
    46             env->ReleaseIntArrayElements(dst_x,xDstValues,0);
    47             
    48             /*----------------数据写回:y层----------*/
    49             env->SetObjectArrayElement(dst_xy,j,dst_x);
    50         }
    51         /*---------------数据写回:z层---------*/
    52         env->SetObjectArrayElement(dst,i,dst_xy);
    53     }
    54 }
  • 相关阅读:
    RHEL6 建立DVD repo
    stl之std::remove_copy
    分鱼问题
    Nutch的日志系统
    log4j配置文件及nutch中的日志配置
    slf4j教程
    Java中的日期操作
    Avro基础
    【JAVA编码专题】总结
    【JAVA编码专题】深入分析 Java 中的中文编码问题
  • 原文地址:https://www.cnblogs.com/baokang/p/4982846.html
Copyright © 2011-2022 走看看