keep some sort of c++ object alive over multiple jni calls(通过多个 jni 调用保持某种 c++ 对象处于活动状态)
问题描述
我的 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.
有没有办法解决这个问题?顺便说一句:我是 C++ 新手.
Is there a way to handle this ? BTW: I am newly to c++.
推荐答案
我不确定我是否理解你的问题.但我猜你想要做的是让某种 c++ 对象在多个 jni 调用中保持活跃.
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: It would be much more helpful if you would post some code. But I hope this pseudo code here helps a little.
这篇关于通过多个 jni 调用保持某种 c++ 对象处于活动状态的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:通过多个 jni 调用保持某种 c++ 对象处于活动状态
基础教程推荐
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 如何对 HashSet 进行排序? 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01