1

我需要从 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传入的引用没有更新,因此我没有获得新数据。

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

4

1 回答 1

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属性访问该数组。

于 2012-06-02T14:07:29.437 回答