我有一个大的C结构体(约40个成员,包括int和char[]),我需要通过JNI传递到Java端进行进一步处理。这会反复发生。(我已经将
有什么有效的方法可以做到这一点吗?
我能想到以下几种方法:
1. 通过
我有遗漏什么吗?(这是我第一次与JNI打交道。)是否真的没有有效的方法来“同步”C结构体和Java结构体?
哪种传递方法更有效,1还是2?在1的情况下,我应该通过
谢谢您的回复。
编辑:稍微改了一下措辞;2当然不需要是一个类,如果有其他处理C数据的解决方案,则在Java端不严格需要一个结构体。
编辑2:我是用C++做的,但是结构体本身来自于一个C链接回调函数,即对问题没有任何特定于C ++的内容。重新表述为“C”而不是“C ++”。
GetMethodID()
等放入C端的init()
函数中,因此我只需要调用它们一次。)有什么有效的方法可以做到这一点吗?
我能想到以下几种方法:
1. 通过
GetMethodID( ..., "<init>", ... )
实例化一个具有相应成员的Java类,并通过构造函数传递C结构的所有成员;
2. 分配一个具有相应成员的Java结构体,并通过SetXYZField()
初始化(公共)成员;
3. ...我有遗漏什么吗?(这是我第一次与JNI打交道。)是否真的没有有效的方法来“同步”C结构体和Java结构体?
哪种传递方法更有效,1还是2?在1的情况下,我应该通过
CallXYZMethod()
(参数列表)还是CallXYZMethodA()
(参数数组)传递构造函数参数?谢谢您的回复。
编辑:稍微改了一下措辞;2当然不需要是一个类,如果有其他处理C数据的解决方案,则在Java端不严格需要一个结构体。
编辑2:我是用C++做的,但是结构体本身来自于一个C链接回调函数,即对问题没有任何特定于C ++的内容。重新表述为“C”而不是“C ++”。