返回字符数组从Java到C - JNI [英] Returning char array from java to C - JNI

查看:146
本文介绍了返回字符数组从Java到C - JNI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Java中的对象存储。我的C程序存储数据(以字符数组形式)在java中。现在,我想从我的店里检索数据。我找不到任何函数调用返回我一个char数组。我怎样才能做到这一点?

I have a object store in Java. My C program stores data (in form of char array) in java. Now I wish to retrieve data from my store. I cannot find any function call that returns me an char array. How can I do this?

推荐答案

您需要使用JNI提供的各种API的一个,大概GetCharArrayElements()。

You need to use one of the various API's provided by JNI, probably GetCharArrayElements().

下面是一个例子,从工作code取来检索从Java字节数组到C(在code是被Java调用的函数,但机制是相同的)。

Following is an example, taken from working code which retrieves a byte array from Java into C (the code is a function which is invoked by Java, but the mechanics are identical).

JNIEXPORT void JNICALL Java_xxx_jniEnqueue(JNIEnv *jep,jobject thsObj,
 jlong handle, jbyteArray jvaKey, jint jvaKeyOfs, jint jvaKeyLen, jbyteArray jvaData, jint jvaDtaOfs, jint jvaDtaLen) {
    jbyte            *jniKey,*jniData;
    jthrowable       escObj;

    jniKey=(*jep)->GetByteArrayElements(jep,jvaKey,0);
    jniData=(*jep)->GetByteArrayElements(jep,jvaData,0);
    ...
    memcpy(odp->enqpfx->Msg,jniKey+jvaKeyOfs,(vuns)jvaKeyLen);              /* key badly named Msg */
    ...
    // enqueue data using key
    if(/* enqueue failed */) {
        (*jep)->ReleaseByteArrayElements(jep,jvaKey ,jniKey ,JNI_ABORT); /* abort to not copy back */
        (*jep)->ReleaseByteArrayElements(jep,jvaData,jniData,JNI_ABORT); /* abort to not copy back */
        throwEscapeObject(jep,escObj);
        return;
        }
    (*jep)->ReleaseByteArrayElements(jep,jvaKey ,jniKey ,JNI_ABORT); /* abort to not copy back */
    (*jep)->ReleaseByteArrayElements(jep,jvaData,jniData,JNI_ABORT); /* abort to not copy back */
    }

这篇关于返回字符数组从Java到C - JNI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆