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

通过JNI获取Java ByteBuffer的指针

顾单弓
2023-03-14
问题内容

如何获得指向Java ByteBuffer内部数组的指针?

JNIEXPORT void JNICALL test(JNIEnv *env, jobject thiso) {
    jclass cls = env->FindClass("java/nio/ByteBuffer");
    jmethodID aloc = env->GetStaticMethodID(cls, "allocateDirect", "(I)Ljava/nio/ByteBuffer;");
    jobject obj = env->CallStaticObjectMethod(cls, aloc, 1000);
}

PS:我这样做是为了共享Java和C ++使用的内存。


问题答案:
void * data = env->GetDirectBufferAddress(obj);

ByteBuffer必须是直接起作用的字节缓冲区。



 类似资料:
  • Go语言程序中对指针获取反射对象时,可以通过 reflect.Elem() 方法获取这个指针指向的元素类型。这个获取过程被称为取元素,等效于对指针类型变量做了一个 操作,代码如下: 代码输出如下: name: ''  kind: 'ptr' element name: 'cat', element kind: 'struct' 代码说明如下: 第 15 行,创建了cat结构体的实例,ins 是一个

  • 问题内容: 我需要计算从Java非常频繁,是有可能得到本机的版本运行速度比 Java的 的? 我只尝试了jni + C,但是它比纯 java 慢。 问题答案: +1以编写自己的exp()实现。也就是说,如果这 确实 是您应用程序中的瓶颈。如果您可以处理一些不准确性,则可以使用许多非常有效的指数估计算法,其中一些可以追溯到几个世纪以前。据我了解,即使对于必须返回“精确”结果的算法,Java的exp(

  • 问题内容: 我一直遵循本文中@tulskiy的建议,通过JNI将Java中的c指针存储在Java中通过JNI在C和Java之间传递指针 诀窍是将指针转换为jlong​​。所以从c我有 我返回一个jlong​​(始终为64位),因为我希望我的代码在64位和32位系统上都能工作。64位计算机上64位指针在内存中的大小为64,而在32位计算机上,内存中指针的大小为32位。 问题是在32位计算机上,我收到

  • 我了解到JNI接口指针(JNIEnv*)仅在当前线程中有效。假设我在本机方法中启动了一个新线程;它如何异步将事件发送到Java方法?因为这个新线程不能引用(JNIEnv*)。存储(JNIEnv*)的全局变量显然不起作用?

  • 问题内容: 我需要知道我的用户是否已连接。为此,我想读取在服务器端通过express-session设置的cookie: 我尝试使用react-cookie,但是它不起作用,但是我复制/粘贴了npm react-cookie doc: 这很奇怪,因为可以呈现正确的结果,但是我不知道如何处理: 问题答案: 您可以使用软件包,也可以使用命令进行安装。 文档:https : //github.com/j

  • 我有一个和我自己的