当前位置: 首页 > 面试题库 >

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

冉子石
2023-03-14
问题内容

我有一个方法:

public native void doSomething(ByteBuffer in, ByteBuffer out);

由javah C / C ++头生成的此方法是:

JNIEXPORT void JNICALL Java__MyClass_doSomething (JNIEnv *, jobject, jobject, jobject, jint, jint);

如何从jobject(即ByteBuffer实例)获取数据数组?


问题答案:

假设您使用ByteBuffer.allocateDirect()分配了ByteBuffer,则可以使用GetDirectBufferAddress

jbyte* bbuf_in;  jbyte* bbuf_out;

bbuf_in = (*env)->GetDirectBufferAddress(env, buf1);  
bbuf_out= (*env)->GetDirectBufferAddress(env, buf2);


 类似资料:
  • 我是相当新的JNI善良,所以请告诉我,如果我是愚蠢的。 我试图将一个自定义异常从C扔到Java层,该层由字符串和整数构成。我无法让ThrowNew()工作,因为它只需要一个字符串参数。我能找到的每个自定义异常的例子都使用ThrowNew()!!Grrrrr 我猜我需要构造一个,并用“扔(jthrowable obj)”扔出去,但我不确定...这和“扔新()”一样吗?? 例如,这就是我需要的: 如果

  • 问题内容: 我对Hibernate Native Query有问题。我有一个选择,它选择数组切片(PostgreSQL数据库)。 问题在于hibernate状态识别以下部分:来自“ SELECT my_array [1:300] …”的“:300”作为命名参数,并且我得到以下异常:尚未设置所有命名参数。 我试图用’:’,’::’逃脱冒号(:),但没有成功。 Hibernate版本是3.2 问题答案

  • 我尝试用JNI在Java项目中加载C代码。我要加载多个DLL,不幸的是,其中两个之间存在循环依赖关系:DLL a需要DLL B,而DLL B又需要DLL a!我知道在DLL之间有循环依赖关系是一种糟糕的编程设计,但在我的项目中,C代码对我来说是一个黑盒子。 有没有办法加载具有循环依赖关系的DLL? 我的代码非常简单: Java库路径是OK的,并且包含两个DLL(它作为VM参数给出,我也将其转储并在

  • 问题内容: spring框架使用的方法可以传递尽可能多的参数。 我想编写一个函数,它也可以接收无限量的数据。如何调用此功能,以便我可以阅读它。或如何定义它? 非常感谢。 问题答案: 它称为varargs。 它允许方法接受任意数量的参数。它们可以在方法中作为数组访问: 这是句法糖。编译器隐藏了数组的创建,因此而不是 你写

  • 我想要的:我在下面试过了,但它不起作用。

  • 问题内容: 如何获得指向Java ByteBuffer内部数组的指针? PS:我这样做是为了共享Java和C ++使用的内存。 问题答案: ByteBuffer必须是直接起作用的字节缓冲区。