J'ai ByteBuffer directe qui devrait contenir 15 valeurs doubles créé de la manière suivanteAccès DoubleBuffer à partir du code natif
DoubleBuffer buff = ByteBuffer.allocateDirect(15*8).asDoubleBuffer();
d'accès I wanna ce tampon de code natif et par souci de simplicité il suffit d'écrire le nombre de 1,0 à 15,0 dedans. Du côté de la méthode java est
native public static void write(DoubleBuffer buff, int len);
et mon code C++ est alors
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;
}
}
Appeler les éléments suivants en seulement java
write(buff, 15);
for(int i=0; i<15; i++){
System.out.println(buff.get(i));
}
imprime des documents inexploitables.
La question est, est-ce que j'alloue correctement le DoubleBuffer? Serait-il préférable d'écrire
DoubleBuffer s = ByteBuffer.allocateDirect(15 * Double.SIZE/8).asDoubleBuffer();
ou y a-t-il encore un moyen?
La deuxième question est, pourquoi cela ne fonctionne-t-il pas? La distribution à double*
dans le code JNI est-elle incorrecte?
Merci