有效地通过JNI将大C结构通过

 2023-01-21    250  

问题描述

我有一个大的C结构(大约40个成员,int和char []),我必须通过JNI到JNI到Java侧进行进一步处理.这反复发生. (我已经将GetMethodID()等放入init()函数上,所以我只需要给它们打电话一次.)

这样做的有效方法是什么?

有效地通过JNI将大C结构通过

我可以想到:

  1. 通过GetMethodID( …, “<init>”, … )与适当的成员实例化Java类,并通过构造函数将C结构的所有成员传递;
  2. 与适当的成员分配Java结构,并通过SetXYZField();
  3. 初始化(公共)成员

我忽略了什么吗? (这是我与JNI的第一个”关闭战斗”.)真的没有有效的方法来”同步” C结构和Java结构?

什么是更有效的传递方法1.或2.?如果是1.

感谢您的输入.

编辑:稍微改写; 2.不需要当课程,如果还有其他解决方案来处理Java端的C数据,我严格不需要在Java侧.

编辑2:我在C ++中执行此操作,但是结构本身源于C-Linkage回调函数,即没有C ++ – 特定于该问题.改写为” C”而不是” C ++”.

推荐答案

为了纯效率,最好最大程度地减少通过JNI的呼叫,因此您最好的选择是通过选项1发送所有数据并创建新对象.

,如果您想避免每个更新分配新对象,但在Java side上也可以在Java端有一个”接收器(… 40 params …)”方法.

其他推荐答案

对不起,我没有时间写一个深入的答案或进一步寻找这个,但是不久前我不得不与JNI做很多工作,我发现使用SWIG极大地帮助了极大的帮助.我不确定它的效率,但我认为它会生成非常有效的代码.

无论如何,请检查一下 swig 结构.

祝你好运.

以上所述是小编给大家介绍的有效地通过JNI将大C结构通过,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对77isp云服务器技术网的支持!

原文链接:https://77isp.com/post/26255.html

=========================================

https://77isp.com/ 为 “云服务器技术网” 唯一官方服务平台,请勿相信其他任何渠道。