熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> JSP教程 >> 正文

Java 技巧:步入本地方法聖殿的七個步驟

2013-11-15 11:46:44  來源: JSP教程 

  只編寫一套 Java 代碼即可使它在安裝了 Java 運行時環境的每個系統上運行這是 Java 的主要優點之一但這種平台獨立性有一大缺點如何利用大量的現有代碼呢?解決這一問題的技巧即使用所謂的 本地方法接口
  編寫本地方法需要將 C 代碼導入 Java 應用程序中在這篇技巧中我將逐步分析創建本地方法以及在 Java 應用程序中使用這些本地方法的基本步驟
  
  步入本地方法聖殿的七個步驟
  創建本地方法的步驟如下所示
  
  編寫 Java 代碼
  編譯 Java 代碼
  創建 C 頭文件(h 文件)
  創建 C stubs 文件
  編寫 C 代碼
  創建共享代碼庫(或 DLL)
  運行應用程序
  我們的任務是在本地方法內向控制台輸出一些文本本例的細節將特定於一種類 Unix 的系統明確地說就是 Linux我還會指出在細節上與其他平台不同的地方
  
  編寫 Java 代碼
  像往常一樣編寫 Java 代碼要在 Java 代碼中使用本地方法必須完成兩項任務首先為您要使用的每個本地方法編寫本地方法聲明這與編寫普通 Java 方法接口的聲明沒什麼不同但您必須指定 native 關鍵字如下所示
  
  public native void printText ();
  
  
  必經的第二個環節是您必須顯式地加載本地代碼庫(我們稍後會創建它)為此我們在類的一個靜態塊中加載這個庫
  
  static
  {
  SystemloadLibrary (happy);
  }
  
  為了將這些代碼整合在一起請創建一個名為 Happyjava 的文件其內容如下所示
  
  class Happy
  {
  public native void printText ();
  
  static
  {
  SystemloadLibrary (happy); /* 請注意類名是小寫的! */
  }
  
  public static void main(String[] args)
  {
  Happy happy = new Happy ();
  happyprintText ();
  }
  }
  
  編譯 Java 代碼
  編譯 Happyjava 文件
  
  % javac Happyjava
  
  創建 C 頭文件
  為了將我們的 C 代碼用作本地方法您必須使用一些極好的固定做法Java 編譯器的 javah 功能將根據 Happy 類生成必要的聲明這將生成 Happyh 文件以供在我們的 C 代碼中包括它
  
  % javah Happy
  
  創建 C stubs 文件
  回憶一下 C++ 轉換程序對 C++ 方法名的處理Java 編譯器也有類似的愚蠢行為為了減輕不得不編寫大量乏味代碼(以便在 Java 運行時系統中調用 C 代碼)的痛苦Java 編譯器可為我們自動生成必要的框架代碼 (trampoline code)
  
  % javah stubs Happy
  
  編寫 C 代碼
  現在我們編寫用來顯示問候語的實際代碼根據約定我們將這段代碼存入一個文件中該文件的名稱為我們的 Java 類名加上字符串 Imp其結果就是 HappyImpc請將以下代碼存入 HappyImpc
  
  #include /* 標准本地方法信息*/
  #include Happyh /* 前面生成的頭文件*/
  #include /* 標准 C IO 信息*/
  
  void Happy_printText (struct HHappy *this)
  {
  puts (Happy New Year!!!);
  }
  
  將 C 代碼與 Java 對接還涉及許多其他方面 如如何傳遞和返回 myriad 類型 有關詳細信息請參閱 Java Tutorial 或 Hermetica 的本地方法論文(有關 URL請參閱參考資源部分)
  
  創建共享庫
  本部分是與系統最緊密相關的部分似乎每種平台和每種編譯器/鏈接器的組合都用不同的方法來創建和使用共享庫如果您使用的是 Microsoft Windows 平台要了解詳細信息請查看您所用的 C 編譯器的文檔
  
  如果您是 Linux 用戶請閱讀以下使用 GCC 創建共享庫的步驟首先編譯我們所創建的 C 源文件您必須通知編譯器在何處查找此 Java 本地方法的支持文件但此處的主要技巧是您必須顯式通知編譯器生成位置無關的代碼
  
  % gcc I/usr/local/java/include I/usr/local/java/include/genunix fPIC c Happyc HappyImpc
  
  
  現在請用下面極好的固定做法根據所生成的對象 (o) 文件創建共享庫
  
  % gcc shared Wlsonamelibhappyso o libhappyso Happyo HappyImpo
  
  請將共享庫文件復制為標准短名
  
  % cp libhappyso libhappyso
  
  最後您可能需要通知動態鏈接程序在何處查找這個新的共享庫文件使用 bash shell
  
  % export LD_LIBRARY_PATH=`pwd`:$LD_LIBRARY_PATH
  
  執行應用程序
  像往常一樣運行此 Java 應用程序
  
  % java Happy
  
  好了這就是所要做的全部工作感謝 Tony Dering 提供了 Linux 特定的固定做法
  
  設計點滴
  在埋頭為全部遺留代碼編寫本地方法之前我提醒您一定要仔細審查系統看是否可用更好的方法將它們結合到 Java 中例如在 Java 中您可以用 Java 數據庫連接 (JDBC) 甚至更高級的解決方案來訪問數據庫因此請查看您掌握的全部技巧並使用就您手頭的項目而言比較合理的解決方案
From:http://tw.wingwit.com/Article/program/Java/JSP/201311/19604.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.