0
我有一个直接ByteBuffer应该容纳15个双重价值创造方式如下访问双缓冲从本地代码
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();
或者是否还有一个方法吗?
第二个问题是,为什么这不起作用?在JNI代码中投到double*
是否错误?
谢谢