小编den*_*yan的帖子

如何使用JNI将Java ByteBuffer发送到C?

首先,我想说旧的答案不起作用(例如,下面的答案中的GetDirectBufferAddress函数现在想要一个参数),如下所示:

JNI - 带有ByteBuffer参数的本机方法

和这里,

如何写入和读取从java传递到jni的bytebuffer

如果有人帮忙会更好..

因此,我无法使用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)

c java java-native-interface bytebuffer native

2
推荐指数
1
解决办法
1571
查看次数

标签 统计

bytebuffer ×1

c ×1

java ×1

java-native-interface ×1

native ×1