程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 相似微信措辭功效的灌音處置代碼分享

相似微信措辭功效的灌音處置代碼分享

編輯:關於JAVA

相似微信措辭功效的灌音處置代碼分享。本站提示廣大學習愛好者:(相似微信措辭功效的灌音處置代碼分享)文章只能為提供參考,不一定能成為您想要的結果。以下是相似微信措辭功效的灌音處置代碼分享正文


開端之前
關於本教程

Ruby on Rails (Rails) 是用 Ruby 編寫的一個 full-stack Web 運用法式框架,而 Ruby 是一種功效豐碩的、收費的、可擴大的、可移植的、面向對象的劇本編制說話。Rails 在 Web 運用法式開辟人員之間異常風行。經由過程它,可以疾速有用地開辟 Web 運用法式,並將其安排就任何 Web 容器中,例如 IBM? WebSphere? 或 Apache Tomcat。

在 Rails 和相似的 Web 運用法式開辟框架湧現之前,用於 Web 運用法式開辟的尺度對象是 Java 說話,由於 Java 說話是自力於平台的,而且有完全的 API 集。許多 Java Web 運用法式依然在運轉,這招致許多異常有效的、編寫優越的 Java 代碼(在本教程中統稱遺留 代碼)具有優越的可用性。遺留 Java 代碼平日被打包在一組 JAR 文件。

假如將 Web 運用法式開辟平台改成 Rails,那末可以重用遺留 Java 代碼。Ruby Java Bridge (RJB) 是一個對象包,經由過程它可以將 JAR 文件裝載到 Rails 運用法式中,還可以在 Rail 運用法式中拜訪個中的辦法和變量。本教程說明若何在 Rails 運用法式中設置裝備擺設和應用 RJB。
目的

在本教程中,您將進修若何:

  •     下載、編譯和裝置 RJB
  •     設置 RJB 以拜訪同享 Java 庫
  •     將遺留 Java 代碼裝載到 Rails 運用法式中並停止拜訪

本教程其實不深刻研討 Rails 的功效。與其他 Web 框架比擬,Rails 有許多長處,個中一個長處就是用於該平台的文檔的數目和質量都很高(拜見參考材料)。
先決前提

本教程假定讀者根本熟習 Java 說話、Ruby 和 Ruby on Rails。
體系需求

本教程假定您應用 Linux? 體系(然則,在 Windows? 上的步調根本上是雷同的)。本教程假定您有一個可以任務的 Ruby on Rails。假如還沒有,請在 參考材料 末節中找到相干文檔的鏈接,以贊助您在本身的體系上裝置和設置裝備擺設 Rails。

RJB 請求體系上裝置有 Java SDK。假如須要一個 Java SDK,可以針對您的平台下載最新的 Java SE SDK,並立時裝置它。

RJB 裝置和設置

本節帶您親歷 RJB 的下載、裝置、編譯和設置。
下載 RJB

可以下載尺度 Ruby Gem 包或本身編譯的源代碼歸檔文件情勢的 RJB。為了停止演示,我推舉下載源代碼歸檔文件,所以我將應用這類辦法。閒話少說,如今就 下載 RJB 1.1.3 source .zip 文件(在撰寫本教程之際,曾經有了最新的 RJB 版本)。

確保設置或更新了以下情況變量,它們是裝置 RJB 所必須的:

  •     JAVA_HOME 必需指向 Java SDK 裝置目次。
  •     PATH 必需包含 $JAVA_HOME/bin。

例如,在 bash(僅用於 Linux 體系)中,假定曾經將 Java SDK 裝置到 /usr/local/jdk60,則履行以下敕令:

[root@san]# export JAVA_HOME=/usr/local/jdk60

[root@san]# export PATH=$PATH:$JAVA_HOME/bin

編譯和裝置 RJB

下一步是經由過程履行以下敕令編譯和裝置 RJB:

[root@san]# unzip rjb-1.1.3.zip

[root@san]# cd rjb-1.1.3

[root@san]# ruby setup.rb config

[root@san]# ruby setup.rb setup

[root@san]# ruby setup.rb install

確認裝置勝利

為了確認 RJB 裝置勝利,起首挪用 Ruby 的交互式掌握台 irb:

[root@san]# irb

然後輸出 require 'rjb':

irb(main):001:0> require 'rjb'

=> true

irb(main):002:0>exit

假如 require 'rjb' 敕令前往 true,則意味著 Ruby 裝置辨認出新裝置的 rjb 庫。如今可以在運用法式中開端應用 RJB。

經由過程 RJB 應用遺留代碼

在本節中,您將在 Rails 運用法式中裝載和拜訪遺留 Java 代碼。
示例項目

Java Tar package from ICE Engineering 是用 Java 說話編寫的一個很好的對象包,用於處置歸檔文件。它供給了 tar 歸檔適用法式的當地 Java 完成,當與 java.util.zip 包相聯合時,它可以處置 .tar.gz 文件。它還應用 Java 說話的平台自力性,可以不作修正地在一切 UNIX? 變體和 Windows 上運轉。作為演習,您將應用它來解壓一個樣例 tar 文件的內容。經由過程相似的辦法,可以在 Ruby on Rails 運用法式中應用任何遺留 Java 代碼。

演習的目的是:

  •     將 tar.jar 文件裝載到一個 Rails 運用法式中。
  •     將 JAR 文件所需的類裝載到運用法式中。
  •     解壓應用這些類的樣例 test.tar 文件的內容。

入門
獲得樣例文件

起首,須要為體系獲得樣例 tar 文件(test.tar)和 Java Tar 包:

  •     將test.tar 下載並保留 到一個便利的地位。
  •     下載和保留javatar-2.5.tar.gz。
  •     將 javatar-2.5.tar.gz 的內容解壓到一個便利的地位。這個演習中,這個包中唯一須要用到的文件是 tar.jar,它在 jars 目次中。

拜訪同享庫

RJB 應用 Java Native Interface (JNI) 完成它的功效。是以,它須要拜訪 JDK 裝置中附帶的一些同享對象文件(同享庫)。您必需應用以下敕令將這些文件的地位添加到 LD_LIBRARY_PATH 情況變量中:

[root@san]# export JAVA_HOME=/usr/local/jdk60

[root@san]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/i386

[root@san]# export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$JAVA_HOME/jre/lib/i386/client

假如盤算在自力的 Ruby 劇本中應用 RJB,那末只需在正在處置的 shell 中設置這些情況變量。關於您的 Ruby on Rails 運用法式,還必需在 Rails 運用法式的 environment.rb 文件中設置這些變量。
將 RJB 裝載到 Rails 運用法式

要將 RJB 裝載到 Rails 運用法式並將它設置為可以挪用 Java 類,須要履行兩個步調:

  1.     告知 Ruby 將 rjb 庫包括到代碼中。
  2.     裝載 JVM,設置類途徑和其他可選的 JVM 參數。
  3. 起首,應用上面的敕令初始化 RJB:

    require 'rjb'
    
    

    接著,將 Rails 運用法式中將要應用的一切 legacy .jar 文件 — 本例中為 tar.jar — 添加到 classpath 變量:

    Rjb::load(classpath = '.:/path/to/tar.jar', jvmargs=[])

    可以將 jvmargs 留空,除非願望為 JVM 指定額定的參數。

    如今,可以將預備應用的 Java 類導入到 Ruby 中,實例化這些類,並挪用所需的辦法。
    將 Java 類導入到 Ruby 並實例化

    清單 1 中的 Ruby 代碼從 tar.jar 包中導入了須要的 Java 類,並從導入的類中創立了 Ruby 對象:
    清單 1. 將 Java 類導入到 Ruby 並實例化

    tararchive = Rjb::import('com.ice.tar.TarArchive')
    
    fileinputstream = Rjb::import('java.io.FileInputStream')
    
    file = Rjb::import('java.io.File')
    
    file_instance = file.new_with_sig('Ljava.lang.String;','.')
    
    fileinputstream_instance =
    fileinputstream.new_with_sig('Ljava.lang.String;','test.tar')
    
    tararchive_instance =
    tararchive.new_with_sig('Ljava.io.InputStream;',fileinputstream_instance)
    
    p "Let's verify that the objects created are indeed of the classes we
    wanted..."
    p "------------------------------"
    
    p "For the File instance...."
    p "Expecting: java.io.File , it is: " + file_instance._classname
    p "------------------------------"
    
    p "For the FileInputStream instance...."
    p "Expecting: java.io.FileInputStream , it is: " +
    fileinputstream_instance._classname
    p "------------------------------"
    
    p "For the TarArchive instance...."
    p "Expecting: com.ice.tar.TarArchive , it is: " +
    tararchive_instance._classname
    
    

    導入 Java 類

    清單 1 中的前三即將挪用 RJB 的 import 辦法,將所需的類分離導入到 Ruby 變量 tararchive、fileinputstream 和 file 中。必需指定類的完全包途徑 — 例如,TarArchive 類為 com.ice.tar.TarArchive,而 FileInputStream 類為 java.io.FileInputStream— 就像應用 java 敕令運轉運用法式那樣。
    實例化導入的類

    接著,清單 1 創立導入類的對象。可以經由過程挪用每一個類的 new 辦法創立類,就像創立任何 Ruby 對象一樣(例如,tararchive.new)。然則如許做會挪用 TarArchive 類的默許的結構函數(沒有參數),而您其實不願望如許做。

    當重載了類的結構函數後,須要對下面的對象創立辦法停止一些修正。在這類情形下,必需依照上面的方法創立對象:

    object = Classname.new_with_sig('signature', parameter[,more parameters])
    
    

    第一個參數界說結構函數所需的參數的簽名類型。它告知 RJB 挪用其輸出參數婚配指定簽名的結構函數。

    清單 1 中的第 4 個和第 5 個語句分離創立 file 和 fileinputstream 類的對象,它們挪用響應的結構函數,參數類型為 String。

    在清單 1 的第 6 個語句中,TarArchive 類的個中一個結構函數接收 InputStream 類型的對象作為參數。該語句的簽名類型是一個零丁的 InputStream 輸出參數。這些類型簽名的具體細節在 getName API 的 Java SDK 文檔中做了很好的描寫(拜見 參考材料)。第二個參數是創立的 InputStream 類型對象。
    磨練對象創立

    清單 1 中的其他內容將磨練 RJB 創立的對象能否是指定類的對象,辦法是挪用添加到每一個對象的 _classname 辦法。例如,挪用 tararchive_instance._classname 將前往 com.ice.tar.TarArchive,這意味著類被准確裝載,並勝利創立了該類的對象。
    挪用辦法並捕捉成果

    將類裝載到 Ruby 並從中創立了對象後,下一步是挪用須要的辦法並檢查成果。例如,您願望應用 TarArchive 類的 extractContents 辦法,將樣例文件(test.tar)的內容提取到以後目次中。

    和結構函數一樣,可使用兩種方法挪用辦法。一種方法是直接挪用辦法,例如:

    tararchive_instance.extractContents(file_instance)
    
    

    當辦法重載後,應用 _invoke 挪用指定辦法的每一個參數的類型簽名:

    tararchive_instance._invoke('extractContents', 'Ljava.io.File;', file_instance)
    
    

    這一步可使 RJB 曉得在辦法重載時應當挪用哪些辦法。

    和看待通俗 Ruby 代碼一樣,您將捕捉對象辦法前往的成果(假如有的話),並在本身的運用法式中應用成果。辦法挪用前往的成果被主動轉換為響應的對象類型。您只需在對象內直接挪用辦法。

    Java TarArchive 類中完成的功效如今可以用於您的 Ruby 代碼。經由過程應用雷同的辦法,Java 代碼中已完成的任何功效可以不加修正地在您的 Ruby 和 Rails 運用法式中重用。
    完全的代碼

    清單 2 展現了本教程示例的完全 Ruby 代碼(也能夠經由過程 下載 取得):
    清單 2. 完全的示例 Ruby 代碼

    # Include 'rjb' library into your application
    
    require 'rjb'
    
    # Load the JVM specifying the jar files to include and any other optional JVM arguments
    
    Rjb::load(classpath = '.:/path/to/tar.jar', jvmargs=[])
    
    # Import the classes you want to use into a Ruby variable
    # specify the full package path to the classes.
    
    tararchive = Rjb::import('com.ice.tar.TarArchive')
    fileinputstream = Rjb::import('java.io.FileInputStream')
    file = Rjb::import('java.io.File')
    
    # Create objects of the classes. Use the new method directly or use 
    # the 'new_with_sig' call to invoke overloaded constructors with arguments
    
    # Directory you want to extract the files in this case, the current directory
    
    file_instance = file.new_with_sig('Ljava.lang.String;','.')
    
    # inputstream instance of the file to extract
    
    fileinputstream_instance = fileinputstream.new_with_sig('Ljava.lang.String;','test.tar')
    
    # tararchive instance of the file to be extracted.
    
    tararchive_instance = tararchive.new_with_sig('Ljava.io.InputStream;'\
            ,fileinputstream_instance)
    
    # Invoke the method from the class and capture the results.
    # Use either the direct call of the method,
    # or the '_invoke' call to invoke overloaded methods.
    
    p 'Extracting file.....'
    
    tararchive_instance.extractContents(file_instance)
    
    p 'Done...'
    
    

    測驗考試這些代碼,將清單 2 中的代碼保留到一個文件中,而且擴大名為 .rb(或應用 下載 中的 rjb-javatar.rb),然後在 Ruby 說明法式中運轉。

    停止語

    在全新的 Rails 運用法式中重用已有的遺留 Java 代碼其實異常簡略,方法以下:

    •     裝置 Java SDK 和 RJB。
    •     將 JAVA_HOME 和 LD_LIBRARY_PATH 情況變量導出到您的 Rails 運用法式的 environment.rb 文件中。
    •     在運用法式中包含 rjb 庫。
    •     經由過程指定願望應用的 JAR 文件,裝載 RJB 和 JVM。
    •     從願望應用的 JAR 文件中將類導入到 Ruby 變量並創立類的對象。
    •     開端在 Rails 運用法式中應用方才創立的類,就像應用任何 Ruby 對象一樣。

    假如願望在 Rails 運用法式中重用曾經應用 Java 代碼完成的營業邏輯,RJB 異常有效,而且不須要應用 Ruby 從新完成。它同時供給了 Ruby on Rails 和 Java 編程的長處。
    斟酌替換辦法

    還可使用一種稱為 JRuby 的替換辦法,它可以完成與 RJB 雷同的目的。JRuby 是應用 Java 說話完成的完全的 Ruby 包,使 Ruby 可以或許運轉在 JVM 之上(拜見參考材料)。應用 JRuby,您可以拜訪一切 Java 庫。JRuby 請求裝置特定於 JRuby 的 Ruby Gems,由於針對非 Java 的 Ruby 的通俗 Ruby Gems 不克不及與 JRuby 兼容。

    RJB 和 JRuby 各有優缺陷。關於 JRuby,Ruby 全體在 JVM 之上運轉,每一個 Ruby 挪用將經由 JVM,這將使履行變得異常遲緩。異樣,假如曾經設置了一個 Rails 運用法式,須要從頭開端設置,以便 JRuby 拜訪 Java 代碼。作為原生 Ruby 包,RJB 易於裝置,而且可以在已有的 Rails 設置中應用。假如須要在您的 Rails 運用法式中疾速挪用一些 Java 代碼片斷,那末 RJB 是最好的選擇。

    全體而言,在 Rails 運用法式中重用遺留 Java 代碼的才能異常有效。應用 Java 說話完成的設計和編寫都異常優越的營業邏輯不會棄捐不消,相反,可以在新的 Web 運用法式中持續施展有效的功效。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved