我的Android项目需要帮助。我想将缓冲区从java传递到jni,而我的C
代码将填充数据。然后,java将它们显示在屏幕上。我对C
不太熟悉,也不知道如何编写写入缓冲区。
这就是我得到的。在java中
ByteBuffer bb = ByteBuffer.allocateDirect(216);
IssmJni.processBuffer(bb);
本机方法
public static native void processBuffer(ByteBuffer bb);
我不使用jni_onload,所以在C ++中没有javah
static void fillBuffer(JNIEnv *env, jclass clazz, jobject buf)
{
double *dBuf = env->GetDirectBufferAddress(env, buf);
}
我被 困在这里 ,我可以加倍 dbuf吗? 还是必须是char ?
让我说我要向该dbuf写1,2,3,4,5,我该怎么做?我在想dbuf.put(1); …
dbuf.put(5),但是它不起作用。并填充它后,我是否只需在Java中调用bb.get(position)?
有人请为我澄清一下,例子将不胜感激谢谢
这是我的本机方法表
静态JNINativeMethod method_table [] = {
{"fac" , "(J)J" , (void *) factorial},
{"getBuffer", "()[D" , (void *) getBufferNative},
//{"processBuffer", "(Ljava/nio/ByteBuffer)V", (void *) fillBuffer}};
除最后一个以外,其他两个都工作正常。
我不使用jni_onload,所以在C ++中没有javah
这可能与您的问题无关,但您必须要做一个或另一个。您要么需要在onLoad函数中进行Java到本地方法的映射,要么使用javah生成JNI在运行时可以拾取的方法签名。否则,您的本机方法将永远不会被调用。
但是,如果正确调用了本机方法,那么您所做的任何事情都可能没问题。
我被困在这里,我可以加倍dbuf吗?还是必须是一个字符?
该函数的返回值实际上是a
void*
,因此您可以将其强制转换为所需的任何指针类型,因为它只是一个内存地址。但是,直接缓冲区的实际数据类型将是jbyte
,这是的typedef
signed char
,因此以下可能是最好的:
jbyte *dBuf = env->GetDirectBufferAddress(env, buf);
让我说我要向该dbuf写1,2,3,4,5,我该怎么做?
C / C ++中用于访问数组中值的表示法带有[]表示法,即:
jbyte *dBuf = env->GetDirectBufferAddress(env, buf);
dBuf[0] = 63;
dBuf[1] = 127;
// ...and so on...
并填充它后,我是否只需在Java中调用bb.get(position)?
是的,您可以使用accessor方法ByteBuffer
来访问从本机代码编写的数据。
用这种方式将字节缓冲符转换为字符串是否正确, 我问这个问题的原因是,这看起来太简单了,而像Java这样的其他方法:将字符串转换成字节缓冲符和相关问题看起来更复杂。
问题内容: 我知道 bufio 包中的golang中的特定功能。 Peek返回下一个n个字节, 而不会使阅读器前进 。在下一个读取调用中,字节停止有效。如果Peek返回的字节数少于n个字节,则它还会返回一个错误,解释读取短的原因。如果n大于b的缓冲区大小,则错误为ErrBufferFull。 我需要能够从阅读器读取特定数量的字节,以 使阅读器更先进 。基本上,与上面的功能相同,但是它使阅读器更高级
如何在标准C++/C++11(无POSIX函数)中优化std::ifstream和std::ofstream的读写速度?(1<-由于有几个问题,这些数字标识了不同点) 我不知道缓冲区的确切作用,所以你能确认一下吗: 用于读取:文件的大部分预加载在内存中(因此缓冲区大小定义了这大部分的大小)(2) 写入:数据写入内存,一旦缓冲区满了,数据就从内存传输到文件系统(3) 如何设置std::ifstrea
问题内容: 我有一个Java程序,它将一些文本输出到控制台。它使用,和其他一些方法来执行此操作。 在程序的最后,我想读取控制台中的所有文本并将其复制到String缓冲区中。我该如何用Java做到这一点?我需要阅读和独立。 问题答案: 好的,这是一个有趣的问题。似乎不是一种同时解决所有方法的优雅方法。(不幸的是没有。) 我确实写了一个丑陋的基于反射的解决方法(我想不要在生产代码中使用它:) …可以像
本文向大家介绍Java缓冲读取器,包括了Java缓冲读取器的使用技巧和注意事项,需要的朋友参考一下 示例 介绍 该BufferedReader班是以外的包装Reader是有两个主要目的类: ABufferedReader为包装的提供缓冲Reader。这允许应用程序一次读取一个字符,而不会产生过多的I / O开销。 一个BufferedReader用于一次读取文本行提供的功能。 使用Buffered
问题内容: 我有以下从缓冲读取器读取数据的示例: 每当缓冲读取器中出现某些情况时(在这种情况下),将执行循环中的代码。在我的情况下,如果客户端应用程序将某些内容写入套接字,则将执行循环中的代码(服务器应用程序中)。 但是我不明白它是如何工作的。等待直到缓冲读取器中出现某些内容,当其中出现某些内容时,它将返回并执行循环中的代码。但是什么时候可以退货。 还有另一个问题。上面的代码摘自一个方法,我在线程