次の方法で作成された15個のdouble値を保持する必要がある直接ByteBufferがあります
DoubleBuffer buff = ByteBuffer.allocateDirect(15*8).asDoubleBuffer();
ネイティブコードからこのバッファにアクセスしたいのですが、簡単にするために、1.0から15.0までの数値を記述してください。Java側からの方法は
native public static void write(DoubleBuffer buff, int len);
そして私のC++コードは
JNIEXPORT void JNICALL Java_ByteBufferTest_write(JNIEnv *env, jclass cl, jobject buff, jint len)
{
double* arr = (double*) env->GetDirectBufferAddress(buff);
for(int i=0; i<15; i++){
arr[i] = (double) i;
}
}
Javaで以下を呼び出す
write(buff, 15);
for(int i=0; i<15; i++){
System.out.println(buff.get(i));
}
ゴミを印刷するだけです。
問題は、DoubleBufferを正しく割り当てるかどうかです。書くほうがいいでしょうか
DoubleBuffer s = ByteBuffer.allocateDirect(15 * Double.SIZE/8).asDoubleBuffer();
それとももっと良い方法がありますか?
2番目の質問は、なぜこれが機能しないのかということです。double*
JNIコードのキャスト先が間違っていますか?
ありがとう