我有一个JNICall,其中DirectByteBuffer
可以像jobject buffer
这样传递。
JNIEXPORT jlong JNICALL Java_JNIFoo_quickSelect0 (
JNIEnv *env, jobject obj, jobject buffer)
为了对缓冲区进行一些操作,我需要知道它的类型是指LongBuffer
还是ShortBuffer
还是CharBuffer
还是IntBuffer
等等。
我如何动态地知道缓冲区的类型,以便使用long *
或short *
或int *
来填充它,如下所示?
long * addr = (long *)(env)->GetDirectBufferAddress(buffer);
我能想到的一种方法是获取缓冲区的类名,然后推断出它的类型。
我不介意要求用户传递类似long.class
的类类型,然后将其作为jclass
本地参数化。
更新:在我建议的任何一个潜在的解决方案中,我需要if-else或切换每种可能的原始类型。我想看看是否有更清洁的方式这样说:
T * addr = (T *)(env)->GetDirectBufferAddress(buffer);