概述
JNA 使 Java 程序可以輕松訪問(wèn)本機(jī)共享庫(kù),而無(wú)需編寫(xiě) Java 代碼以外的任何內(nèi)容 - 不需要 JNI 或本機(jī)代碼旺垒。此功能可與 Windows 的 Platform/Invoke 和 Python 的 ctypes 相媲美都哭。
JNA 允許您使用自然 Java 方法調(diào)用直接調(diào)用本機(jī)函數(shù)掰盘。Java 調(diào)用看起來(lái)就像本機(jī)代碼中的調(diào)用一樣鼠证。大多數(shù)調(diào)用不需要特殊處理或配置;不需要樣板文件或生成的代碼秸谢。
JNA 使用小型 JNI 庫(kù)存根來(lái)動(dòng)態(tài)調(diào)用本機(jī)代碼凛澎。開(kāi)發(fā)人員使用 Java 接口來(lái)描述目標(biāo)本地庫(kù)中的函數(shù)和結(jié)構(gòu)。這使得利用本機(jī)平臺(tái)功能變得非常容易估蹄,而不會(huì)產(chǎn)生為多個(gè)平臺(tái)配置和構(gòu)建 JNI 代碼的高昂開(kāi)銷塑煎。閱讀這個(gè)更深入的描述。
盡管人們對(duì)性能給予了極大的關(guān)注臭蚁,但正確性和易用性是優(yōu)先考慮的最铁。
此外讯赏,JNA 包括一個(gè)平臺(tái)庫(kù),其中已經(jīng)映射了許多本機(jī)功能冷尉,以及一組簡(jiǎn)化本機(jī)訪問(wèn)的實(shí)用程序接口漱挎。
特征
- 從 Java 到本機(jī)函數(shù)的自動(dòng)映射,所有原始數(shù)據(jù)類型的簡(jiǎn)單映射
- 在大多數(shù)支持 Java 的平臺(tái)上運(yùn)行
- C 和 Java 字符串之間的自動(dòng)轉(zhuǎn)換雀哨,具有可定制的編碼/解碼
- 結(jié)構(gòu)和聯(lián)合參數(shù)/返回值磕谅,按引用和按值
- 函數(shù)指針,(從本機(jī)代碼到 Java 的回調(diào))作為參數(shù)和/或結(jié)構(gòu)的成員
- 為本地函數(shù)指針自動(dòng)生成的 Java 代理
- 按引用(指向類型的指針)參數(shù)
- Java 數(shù)組和 NIO 緩沖區(qū)參數(shù)(原始類型和指針)作為指向緩沖區(qū)的指針
- 嵌套結(jié)構(gòu)和數(shù)組
- 寬(基于 wchar_t)字符串
- 本機(jī)長(zhǎng)支持(32 位或 64 位雾棺,視情況而定)
- 演示應(yīng)用程序/示例
- 在 1.4 或更高版本的 JVM 上受支持膊夹,包括 JavaME(早期的 VM 可能與存根 NIO 支持一起工作)
- 可定制的編組/解組(參數(shù)和返回值轉(zhuǎn)換)
- 從 Java 方法到本機(jī)函數(shù)名稱的可定制映射,以及可定制調(diào)用以模擬 C 預(yù)處理器函數(shù)宏
- 支持自動(dòng) Windows ASCII/UNICODE 函數(shù)映射
- 可變參數(shù)支持
- 本機(jī)指針的類型安全
- 虛擬機(jī)崩潰保護(hù)(可選)
- 針對(duì)高性能應(yīng)用程序優(yōu)化的直接映射捌浩。
- COM 支持早期和晚期綁定割疾。
- COM/Typelib java 代碼生成器。