【问题标题】:return byte array in jni android?在jni android中返回字节数组?
【发布时间】:2014-10-28 07:55:24
【问题描述】:

我需要从 jni 获取字节数组到 Java。 例如:我有一个字节数组 byte[] a = {1,2,3,4,5,6}

JNIEXPORT jbyteArray JNICALL Java_com_vn_getArray (JNIEnv *env, jobject obj) {
  jbyte[] a = {1,2,3,4,5,6};
  return a;

}

我不知道如何从 jni 返回一个字节数组。

有人可以帮助我吗?请!

【问题讨论】:

    标签: android android-ndk java-native-interface


    【解决方案1】:

    在 Java 中,数组是一个对象。因此,要将 C 或 C++ 中的字节数组交给 java,您需要实例化一个 jbyteArray,然后将其返回。而不是 C 数组。要解决这个问题,请参阅以下代码:

    JNIEXPORT jbyteArray JNICALL Java_Test_returnArray
      (JNIEnv *env, jobject This)
    {
            jbyte a[] = {1,2,3,4,5,6};
            jbyteArray ret = env->NewByteArray(6);
            env->SetByteArrayRegion (ret, 0, 6, a);
            return ret;
    }
    

    基于此link

    【讨论】:

    • 你有什么异常吗?在 Java 端可以看到的返回值是多少?
    • @DungQuang 现在请检查代码,我有更多时间查看它并修复了一个相当尴尬的编译器错误。编辑后的代码对我有用,并在 Java 端返回一个字节数组,计数为 6。
    • tks,我通过以下代码解决了这个问题: JNIEXPORT jbyteArray JNICALL Java_com_example_json_bo_getArrray (JNIEnv *env, jobject o) { jbyte a[] = {1,2,3,4,5,6} ; jbyteArray ret = (*env)->NewByteArray(env, 6); (*env)->SetByteArrayRegion (env, ret, 0, 6, a);返回 ret; } 求帮助!
    【解决方案2】:

    我喜欢它,它正在工作

    JNIEXPORT jbyteArray JNICALL Java_com_vn_getArray(JNIEnv *env, jobject obj) {
        jbyte byteUrl[] = {1,2,3,3,4};
        int sizeByteUrl = 5;
    
        jbyteArray data = (*env)->NewByteArray(env, sizeByteUrl);
        if (data == NULL) {
            return NULL; //  out of memory error thrown
        }
    
        // creat bytes from byteUrl
        jbyte *bytes = (*env)->GetByteArrayElements(env, data, 0);
        int i;
        for (i = 0; i < sizeByteUrl; i++) {
            bytes[i] = byteUrl[i];
        }
    
        // move from the temp structure to the java structure
        (*env)->SetByteArrayRegion(env, data, 0, sizeByteUrl, bytes);
    
        return data;
    }
    

    【讨论】:

    • 完成后,您需要调用 ReleaseByteArrayElements 来释放字节。
    猜你喜欢
    • 2013-06-12
    • 2017-12-21
    • 1970-01-01
    • 2017-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-07
    • 1970-01-01
    相关资源
    最近更新 更多