JNI的缺點:繁瑣
我們知道,使用JNI調用.dll/.so共享類庫是非常非常麻煩和痛苦的。
如果有一個現有的.dll/.so文件,如果使用JNI技術調用,我們首先需要另外使用C語言寫一個.dll/.so共享庫,使用SUN規定的數據結構替代C語言的數據結構,調用已有的 dll/so中公佈的函數。
然後再在Java中載入這個適配器dll/so,再編寫Java native函數作爲dll中函數的代理。
經過2個繁瑣的步驟才能在Java中調用本地代碼。
因此,很少有Java程序員願意編寫調用dll/.so庫中的原生函數的java程序。這也使Java語言在客戶端上乏善可陳。可以說JNI是Java的一大弱點!
JNA優點:簡單
JNA(Java Native Access )提供一組Java工具類用於在運行期動態訪問系統本地庫(native library:如Window的dll,Android的so)而不需要編寫任何Native/JNI代碼。開發人員只要在一個Java接口中描述目標native library的函數與結構,JNA將自動實現Java接口到native function的映射。
在github上的傳送門---JNA
具體例子可以參見我的資源。