在多个jni调用中保持某种c ++对象的存活 [英] keep some sort of c++ object alive over multiple jni calls
问题描述
我的java代码将调用存在的c ++代码来解析文件。它会生成一个保存很多数据的对象。
我将调用jni的第二种方法来访问这些数据,
当我调用第二种方法时,我必须再次解析文件。这显然是正确的行为。
My java code will call the exist c++ code to parse the file. it will generate an object which keep many data. I will call the jni's second method to access such data, When I call the second method, I have to parse the file again. it is obviously the right behavior.
有没有办法解决这个问题?
BTW:我刚接触c ++。
Is there a way to handle this ? BTW: I am newly to c++.
推荐答案
我不确定我是否理解你的问题是正确的。但我想你想要做的是在多个jni调用上保持某种c ++对象的存活。
I am not sure if I understand your question correct. But I guess what you want to do is to keep some sort of c++ object alive over multiple jni calls.
你可以做多件事。首先解析文件并将c ++对象存储在全局变量中。这是最简单的解决方案,但不是很好。
You can do multiple things. First parse your file and store your c++ object in a global variable. This is the simplest solution but not a nice one.
您还可以将c ++对象的生命周期移动到java。
You can also move the life cycle of your c++ object into java.
jlong java_some_class_jni_method(...)
{
.... parse your text file ....
MyParseclass* cls = new MyParseclass(...);
....
return (jlong) cls;
}
但请记住,您需要再次删除此本机c ++类。所以你需要一个jni方法,并确保调用它。
But keep in mind that you need to delete this native c++ class again. So you need a jni method to this and be sure to call it.
void java_some_calls_jni_method(..., jlong clsPtr)
{
MyParseclass* cls = (MyParseclass*)clsPtr;
... do maybe do something with cls and access the data...
delete cls; // do not use the jlong again in any call
}
BTW:这将是如果你发布一些代码,会更有帮助。但是我希望这里的伪代码能有所帮助。
BTW: It would be much more helpful if you would post some code. But I hope this pseudo code here helps a little.
这篇关于在多个jni调用中保持某种c ++对象的存活的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!