2014-01-06 113 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()調用時保留該文件的全局變量。