首先,我想说旧的答案不起作用(例如,下面的答案中的GetDirectBufferAddress函数现在想要一个参数),如下所示:
和这里,
如果有人帮忙会更好..
因此,我无法使用JNI正确地将我的ByteBuffer(其中一些元素已填充)从Java发送到C,并且我无法将该ByteBuffer的元素再次返回到C
我的本地功能解除:
public native int myfunc(ByteBuffer pkt);
Run Code Online (Sandbox Code Playgroud)
分配给它
private ByteBuffer pkt = ByteBuffer.allocate(1000);
Run Code Online (Sandbox Code Playgroud)
我这样称呼它:
System.out.println(myfunc(pkt)); // Doesn't works, throws exception
pkt.position(0);
System.out.println(pkt.get()); // works, when I do comment line above .println
Run Code Online (Sandbox Code Playgroud)
我的C代码如下:
JNIEXPORT jint JNICALL Java_xxx_myfunc(JNIEnv *, jobject, jobject); // header
JNIEXPORT jint JNICALL Java_xxx_myfunc(JNIEnv *env, jobject obj, jobject pkt) // function
{
jbyte *buff = (jbyte *) env->GetDirectBufferAddress(pkt);
// buff[0] = 0; I've also tried in this way
return buff[0];
//return 1; …Run Code Online (Sandbox Code Playgroud)