JNI层数组的处理

原创 2013年12月03日 16:31:51

1.使用数组作为参数

JNIEXPORT void JNICALL
Java_org_davidliebman_android_awesomeguy_Panel_setTileMapData(JNIEnv * env, jobject  obj,
jintArray a_bitmap, jintArray b_bitmap, jintArray c_bitmap, jintArray d_bitmap)
{
  //jsize a_len = (*env)->GetArrayLength(env, a_bitmap);
  jint *a = (*env)->GetIntArrayElements(env, a_bitmap, 0);
  //jsize b_len = (*env)->GetArrayLength(env, b_bitmap);
  jint *b = (*env)->GetIntArrayElements(env, b_bitmap, 0);
  //jsize c_len = (*env)->GetArrayLength(env, c_bitmap);
  jint *c = (*env)->GetIntArrayElements(env, c_bitmap, 0);
  //jsize d_len = (*env)->GetArrayLength(env, d_bitmap);
  jint *d = (*env)->GetIntArrayElements(env, d_bitmap, 0);
  setTileMapData(a, b, c, d );
}

代码中传进去的jintArray类型需要进行转换才能给C/C++代码使用,其中GetArrayLength是获取数组长度,GetArrayElements是获取数组指针

JAVA端的代码就如下:

public native void setTileMapData( int [] a, int [] b, int [] c, int [] d);


2.返回类型是数组

JNIEXPORT jintArray JNICALL
Java_org_davidliebman_android_awesomeguy_Panel_drawLevel(JNIEnv * env, jobject  obj,
jint animate)
{
        int j,k;
        jint size = SCREEN_WIDTH * SCREEN_HEIGHT;
        jint fill[size]; 
        jintArray graphic;
        drawLevel(animate);
        graphic = (*env)->NewIntArray(env, size);
        if(graphic == NULL) {
                LOGE("ARRAY NOT CREATED");
                return NULL;
        }
        for (j = 0; j < SCREEN_HEIGHT; j++) {
                for (k = 0; k < SCREEN_WIDTH ; k ++ ) {
                        fill[ (j * SCREEN_WIDTH) + k ] = (jint) screen[j][k];
                }
        }
        
        
        (*env)->SetIntArrayRegion(env, graphic,0, size, fill);
        return graphic;
}


首先,在C/C++中使用数组来存储的数据,通过SetIntArrayRegion函数来转换成jintArray返回

JAVA端代码就这样:

public native int[] drawLevel(int num);



相关文章推荐

JNI数组传递与异常处理

分类: JNI(java native interface) 2010-09-09 09:48 861人阅读 评论(1) 收藏 举报 JNI通过JNIEnv提供的操作Java数组的功能。它提供了两...

本地方法(JNI)——访问数组元素+错误处理

【0】README1) 本文文字描述 均转自 core java volume 2 , 旨在理解 本地方法(JNI)——访问数组元素+错误处理 的基础知识 ; 【1】本地方法(JNI)——访问数组元...

JNI数组传递与异常处理

JNI通过JNIEnv提供的操作Java数组的功能。它提供了两个函数:一个是操作java的简单型数组的,另一个是操作对象类型数组的。因为速度的原因,简单类型的数组作为指向本地类型的指针暴露给本地代码。...
  • lychaox
  • lychaox
  • 2011年07月14日 13:38
  • 554

NDK开发 - JNI数组数据处理

NDK开发 - JNI数组数据处理转载至 :http://gnaixx.cc/2016/04/07/ndk-array/     JNI 中的数组分为基本类型数组和对象数组,它们的处理方式是不一样的,...
  • c____4
  • c____4
  • 2016年10月20日 17:02
  • 113

JNI数组传递与异常处理

分类: JNI(java native interface) 2010-09-09 09:48 861人阅读 评论(1) 收藏 举报 JNI通过JNIEnv提供的操作Java数组的功能。它提供了两...

Java层与Jni层的数组传递

Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni...

Android开发实践:Java层与Jni层的数组传递

Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni...

Android开发实践:Java层与JNI层的数组传递

Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni...

Android开发实践:Java层与Jni层的数组传递

Android开发中,经常会在Java代码与Jni层之间传递数组(byte[]),一个典型的应用是Java层把需要发送给客户端的数据流传递到Jni层,由Jni层的Socket代码发送出去,当然,Jni...

JNI学习三-简单类型数组访问

  • 2012年03月30日 20:54
  • 11KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JNI层数组的处理
举报原因:
原因补充:

(最多只允许输入30个字)