gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 00:20:04 26 4
gpt4 key购买 nike

我正在用 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 字节数组;

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

关于java - 如何使用jni直接将字节数组从c复制到java byte []属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46491144/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com