[英]how to copy byte array from c to java byte[] attribute directly with jni
我正在用jni為Android編寫C模塊。
我的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();
}
我想在C中填寫Payment實例的字節數組,但我做不到。
為此目的,jni呼叫的程序是什么?
我得到與sendBuffer的字段ID
jclass thisClass = (*env)->GetObjectClass(env, obj);
jfieldID sendId = (*env)->GetFieldID(env, thisClass, "sendBuffer", "[B");
但我不知道如何將數據從char [1024]復制到sendBuffer。
您可以使用類似的方法將數據從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.