2

我有一个关于数据类型的问题,我想在开始编码之前弄清楚!假设我在 C++ 中有一个方法,它返回一个数组或一个双精度缓冲区。然后我需要将这个 double[] 转换为 jdouble,使用 JNI 标头,以便 Java 可以处理数据。

我的第一个问题是我应该将我的 C++ 方法配置为返回一个双精度数组还是一个双精度缓冲区。我知道它们几乎相同,但不知道哪个更好。另外,如何以 Java 可以理解的方式转换缓冲区?

这是我到目前为止所拥有的:

JNIEXPORT jdouble[] JNICALL Java_Test_getDouble[](JNIEnv *env, jobject obj) 
{
      double[] temp= new double[someSize];
      temp = // call my C++ code

      jdouble result = new jdouble[someSize];
      for(i = 0; i < someSize; i++)
           converting double in temp to jdouble in result;

       return result;     
}

然后Java可以对数据做任何它想做的事情。

我的代码有意义吗?我读了一些关于ByteGetElement()但我不知道它是否可以在这里应用的帖子。如果你能给我一个简单的例子,那将是非常有帮助的。最终,我仍然需要知道是否应该使用双精度数组或缓冲区。

非常感谢。

4

1 回答 1

2

就 C 而言,jdouble 实际上与 double 相同。

// just for the sake of the example  this buffer exists and holds the double values in C
double* sourceBuffer;

// allocate the jdouble Array
jdoubleArray output = (*env)->NewdoubleArray(env, someSize);

// check if it was allocated correctly
if (NULL == output) return NULL;

// commit the contents of the double* array (sourceBuffer in this example) into the Java array 
(*env)->SetDoubleArrayRegion(env, result, 0, someSize, sourceBuffer);
return result;
于 2014-01-09T16:31:22.213 回答