2

データ型について質問があります。コーディングを開始する前に明確にしたいと思います。配列または double のバッファーを返す C++ のメソッドがあるとします。次に、Java がデータを処理できるように、JNI ヘッダーを使用して、この double[] を jdouble に変換する必要があります。

私の最初の質問は、double の配列または double のバッファーを返すように 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()たが、ここで適用できるかどうかわかりません。本当に役立つ簡単な例を教えていただければ幸いです。そして最終的には、double の配列とバッファーのどちらを使用する必要があるかを知る必要があります。

どうもありがとうございました。

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 に答える