如何使用jni直接将字节数组从c复制到java byte []属性

时间:2017-09-29 14:35:17

标签: java android c arrays java-native-interface

我正在用jni for android编写一个C模块。
我的java类是

Foo<T>::Foo(){}

我想在c中填写Payment实例的字节数组,但我不能这样做。
jni为此目的打电话的程序是什么?

我使用

获取sendBuffer的字段ID
public class Payment {
    private static Payment payment = null;
    private long nativeObj;
    private byte[] sendBuffer;
    private byte[] recvBuffer;
    private byte[] msg;

    private Payment() {
        this.sendBuffer = new byte[1024];
        this.recvBuffer = new byte[1024];
        this.msg = new byte[1024];
    }

    public native void setArray();

 }

但我无法弄清楚如何将数据从char [1024]复制到sendBuffer。

1 个答案:

答案 0 :(得分:1)

您可以使用类似的东西将数据从C复制到java字节数组;

jint_Java_com_stack_overflow_copyBytes(JNIEnv *e, jclass obj, jlong p)
{
    jclass thisClass = (*env)->GetObjectClass(e, obj);
    jfieldID sendId = (*env)->GetFieldID(e, thisClass, "sendBuffer", "[B");        
    jbyteArray bytes = (*e)->GetObjectField(e, obj, sendId)

    jbyte* b = (*e)->GetByteArrayElements(e, bytes, NULL);
    memcpy(myCBytes, b, len);
    (*e)->ReleaseByteArrayElements(e, bytes, b, 0);
}