通过引用从java返回到JNI

时间:2012-06-01 19:56:04

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

我需要从JNI调用的java方法中传递一个数组和一个整数。

public static int foo(byte[] data)
{
    byte[] buffer;
    // Fill buffer with data
    data = buffer;  // <--- This doesn't work as the pointer is changed
    return bufferSize;
}

在指示的行中,我理解指针已更改,但我在JNI中引用的data的引用不会更新,因此我无法获取新数据。

我如何通过参数返回额外数据?

1 个答案:

答案 0 :(得分:0)

归功于K-ballo:

字节数组需要在包装类中。

class ByteArrayWrapper {
    public ByteArrayWrapper() {}
    public byte[] array;
}

在JNI中,我创建了这个类的实例并将其传递给方法。

public static int foo(ByteArrayWrapper data) {
    byte[] buffer;
    // Fill buffer with data
    data.array = buffer;
    return bufferSize;
}

JNI中ByteArrayWrapper的实例现在包含新的字节数组,可以使用该属性的jfieldID来访问它。