跳至內容

JavaNativeAccess

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

Java Native Access(JNA) 是一个社群開發的庫,伊使 Java 程式毋免使用 Java Native Interface 就會當輕鬆存取本地共享庫。JNA 的設計旨佇以上少的努力以原生的方式提供本地存取,而且無需要樣板代碼或膠水代碼。

結構

JNA 庫使用一个叫做外部函式介面庫(libffi)的小型本機庫來動態呼叫本機代碼。JNA 庫使用本地的函式,允准代碼照名稱載入庫並檢索指向該庫中函式的指標,使用 libffi 庫來共呼叫,煞無需要靜態結束,標頭檔抑是任何編譯。開發人員使用 Java interface 描述目標本機庫內底的函式佮結構(struct)。 這予得利用平台功能非常容易,避免組態猶閣有構建的 JNI 的懸開銷。

JNA 支援佇咧 macOS,Microsoft Windows,FreeBSD / OpenBSD,Solaris,GNU / Linux,AIX,Windows Mobile 和 Android 上構建和測試。經過適當的調整佮重編譯,會使其實佇大多數會使執行 Java 的平台頂執行。

類型對應

這个表格顯示矣 JNA 所支援的類型佮 java 類型,Windows 通用類型的對應關係 .

注意:根據一寡前置處理器指令佮無仝的實現,TCHAR 可能為 char 抑是 wchar \ _ t。LPCTSTR 嘛是仝款的。

資料結構的記持體位元組對齊

JNA 無規定的記持體位元組的對齊方式。JNA 預設為遵循 OS 平台的設定,但是嘛是會當自訂對齊的方式。若準本機庫的文件無提供關於記憶體對齊的詳細資訊,著愛通過試驗確定著愛正確的對齊方式。

範例

下跤這个例展示矣 JNA 欲按怎載入 C 標準庫並使用其中的 printf 函式。

注意 :這个例是無仝款台的,這意味著伊會當佇 Windows / GNU + Linux / Unix / macOS 執行,並且得著完全仝款的結果。

下跤這个例使用矣 C POSIX 庫並呼叫其中的 mkdir 函式。

注意 :這个例佇咧 POSIX 相容的系統內底是迒平台的,這意味著伊會當佇所有 POSIX 相容系統中執行並得著相仝結果,但是伊無法度佇大多數 Windows 系統上執行。

下跤這个例載入去矣 Kernel 三十二 . dll 並且呼叫其中的 Beep 和 Sleep 函式。

注意 :這个例干焦會當佇 Windows 下執行。

用處

JNA 被用佇下列專案當中:

  • Armed Bear Common Lisp , 使用 JNA 實現 CFFI。
  • JRuby , 使用 JNA 實現 POSIX 相關功能。
  • Freedom for Media in Java ( FMJ )。
  • JetBrains 的 IntelliJ IDEA。
  • OpenSearchServer , 一个開源搜揣 ia̋n-jín。
  • SVNKit , 一个純 Java 的 Java Subversion client 庫,通過 JNA 實現相關功能。
  • VLC media player , 佇咧 vlcj 庫中使用。
  • Cyberduck 適用佇咧 FTP , SFTP , WebDAV , Cloud Files & Amazon S 三的瀏覽器。
  • Log 四 j , 附加紀錄檔庫。
  • Hudson 和 ・ Jenkins,繼續整合侍服器。
  • Webdriver。
  • YAJSW ( Yet Another Java Service Wrapper )。
  • Cassandra , 來自 Apache Software Foundation 的開源分布資料庫,使用 JNA。

另見

  • P / Invoke
  • SWIG

參考連結

外部連結

  • Java Native Access Web Page
  • Java Native Access-Download page
  • Java Native Access-User Mailing List
  • Java Native Access : An easier way to access native code by Jeff Friesen , JavaWorld . com , 二千空八孵二二孵五
  • Protect Your Legacy Code Investment with JNA by Stephen B . Morris , Java . net , 二千空九九五五鋪二十
  • Dasgupta , Sanjay . Simplify Native Code Access with JNA . Java . net . 二千空九九九九十一 [二千空二十五七孵二十三] .(原始內容存檔佇兩千空九石十一鋪十五).
  • JNA is now a Githubber by Daniel Doubrovkine , 二千空一十一孵九九二十
  • Calling the Lotus Domino C-API with JNA by Jesper Kiaer 二千空一十三抹二十一