我正在用jni for android编写一个C模块。
我的java类是
Foo<T>::Foo(){}
我想在c中填写Payment实例的字节数组,但我不能这样做。
jni为此目的打电话的程序是什么?
我使用
获取sendBuffer的字段IDpublic 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。
答案 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);
}