如何在JNI中从GetDirectBufferAddress调用多种数据类型?
我bytebuffer
通过本机方法获得了。
在bytebuffer
3个开始int
s,则仅包含双打。第三个int
告诉我接下来的双打次数。
我能够阅读前int
三秒。
为什么在我尝试读取双打时代码崩溃?
获得前三个整数的相关代码:
JNIEXPORT void JNICALL test(JNIEnv *env, jobject bytebuffer){
int * data = (int *)env->GetDirectBufferAddress(bytebuffer);
}
获得剩余双打的相关代码:
double * rest = (double *)env->GetDirectBufferAddress(bytebuffer + 12);
回答:
在您发布的代码中,您将其称为:
double * rest = (double *)env->GetDirectBufferAddress(bytebuffer + 12);
这会将12加到bytebuffer
jobject
,而不是数字。
GetDirectBufferAddress()
返回一个地址;由于前3 int
个字节各为4个字节,因此我相信您正确地添加了12个字节,但未
。
您可能打算这样做:
double * rest = (double *)((char *)env->GetDirectBufferAddress(bytebuffer) + 12);
对于您的总体代码,要获取前三个int
s和其余的double
s,请尝试类似以下操作:
void * address = env->GetDirectBufferAddress(bytebuffer);int * firstInt = (int *)address;
int * secondInt = (int *)address + 1;
int * doubleCount = (int *)address + 2;
double * rest = (double *)((char *)address + 3 * sizeof(int));
// you said the third int represents the number of doubles following
for (int i = 0; i < doubleCount; i++) {
double d = *rest + i; // or rest[i]
// do something with the d double
}
以上是 如何在JNI中从GetDirectBufferAddress调用多种数据类型? 的全部内容, 来源链接: utcz.com/qa/401220.html