如何写入和读取从java传递到jni的bytebuffer
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何写入和读取从java传递到jni的bytebuffer,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1863字,纯文字阅读大概需要3分钟。
内容图文
![如何写入和读取从java传递到jni的bytebuffer](/upload/InfoBanner/zyjiaocheng/699/8d9b89c0f18c4061b562244015cd9185.jpg)
我的android项目需要帮助.
我想将缓冲区从java传递给jni,我的C代码将填充数据.然后java将在屏幕上显示它们.
我对C不太熟悉,也不知道如何写入写入缓冲区.
这就是我得到的.
在java中
ByteBuffer bb = ByteBuffer.allocateDirect(216);
IssmJni.processBuffer(bb);
本地方法
public static native void processBuffer(ByteBuffer bb);
我不使用jni_onload,所以没有javah
在C.
static void fillBuffer(JNIEnv *env, jclass clazz, jobject buf)
{
double *dBuf = env->GetDirectBufferAddress(env, buf);
}
我被困在这里,我可以做双dbuf吗?或者它必须是一个炭?
我想说我想给这个dbuf写1,2,3,4,5,我该怎么做?
我在想dbuf.put(1); … dbuf.put(5)但它不起作用.
在填充之后,我只是在java中调用bb.get(position)吗?
有人为我澄清这个,例子将不胜感激
谢谢
这是我的原生方法表
static JNINativeMethod method_table [] = {
{"fac" , "(J)J" , (void *) factorial},
{"getBuffer", "()[D" , (void *) getBufferNative},
//{"processBuffer", "(Ljava/nio/ByteBuffer)V", (void *) fillBuffer}};
除了最后一个之外,其他两个工作正常.
解决方法:
I don’t use jni_onload, so no javah in C++
这可能与您的问题无关,但您必须做一个或另一个.您需要在onLoad函数中执行Java-to-Native方法映射,或者使用javah生成JNI可以在运行时获取的方法签名.否则,永远不会调用您的本机方法.
但是,如果正确调用了本机方法,那么无论你做什么都可能没问题.
I am stuck here, can I do double dbuf? or is it has to be a char?
该函数的返回值实际上是一个void *,因此您可以将它转换为您想要的任何指针类型,因为它只是一个内存地址.但是,直接缓冲区的实际数据类型将是jbyte,它是signed char的typedef,因此以下可能是最好的:
jbyte *dBuf = env->GetDirectBufferAddress(env, buf);
Let said I want to write 1,2,3,4,5 to this dbuf, how do I do it?
C/C++中用于访问数组中值的符号是[]符号,即:
jbyte *dBuf = env->GetDirectBufferAddress(env, buf);
dBuf[0] = 63;
dBuf[1] = 127;
// ...and so on...
and after populating it, do I just call bb.get(position) in java?
是的,您可以使用ByteBuffer上的访问器方法来访问您从本机代码中编写的数据.
内容总结
以上是互联网集市为您收集整理的如何写入和读取从java传递到jni的bytebuffer全部内容,希望文章能够帮你解决如何写入和读取从java传递到jni的bytebuffer所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。