简体   繁体   English

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

[英]how to copy byte array from c to java byte[] attribute directly with jni

I am writing a C module with jni for android. 我正在用jni为Android编写C模块。
my java class is 我的java类是

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();

 }

i want to fill byte arrays of Payment instance in c and i can not do it. 我想在C中填写Payment实例的字节数组,但我做不到。
what is the procedure of jni call for this purpose? 为此目的,jni呼叫的程序是什么?

i get the field id of sendBuffer with 我得到与sendBuffer的字段ID

jclass thisClass = (*env)->GetObjectClass(env, obj);
jfieldID sendId = (*env)->GetFieldID(env, thisClass, "sendBuffer", "[B");

but i can not figure out how to copy data from char[1024] to sendBuffer. 但我不知道如何将数据从char [1024]复制到sendBuffer。

You can use something like this to copy data from C to java bytes array; 您可以使用类似的方法将数据从C复制到java bytes数组;

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);
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM