如何根据缓冲区类型动态转换GetDirectBufferAddress?

时间:2016-08-02 02:42:53

标签: java c++ java-native-interface

我有一个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);

0 个答案:

没有答案