2014-01-06 77 views
0

我想制作一个使用Jni包装C++库的包装器。基本上,我有第三方库,它可以读取文件中的点(x,y,z)。所以,文件路径必须是输入参数。 我JNI是像

JNIEXPORT void JNICALL to_the_path_loadFile(JNIEnv *env, jobject obj,jstring filePath)

JNIEXPORT jdouble JNICALL to_the_path_getX(JNIEnv *env, jobject obj, jint index)使用Jni包装C++库

第一种方法将加载文件,第二个将得到坐标x。

由于该文件具有大量的点,我无法将它们全部加载到内存中。 我的想法是使用迭代器迭代每个点并将其包装到Java对象。这意味着我必须多次致电getX()

我的问题是如何避免加载文件流很多次?我是新来的c + +,有没有一种方法,我可以参考回C++对象,所以我能够告诉我正在阅读哪一点?

回答

0

与Turix的解决方案类似,但没有C++全局变量。有loadFile()返回文件描述符并将其传递给getX()。检索完所有X值后,还应该有一个closeFile()方法来关闭打开的文件。

由于您有很多值,您还可以将getX()传递给双精度本地数组,因此它可以在一次调用中检索多个值。这是一个不同的设计,但它会更有效率。

此外,请考虑使用SWIG来创建包装类。它使得创建和管理Java端更容易

0

是的,有几种方法可以做到这一点,但可能最简单的方法是在C++代码中为您的loadFile()调用初始化并调用getX()调用时保留该文件的全局变量。