Java嵌入式開發講座(第二講)

azz發表於2007-08-24
Java嵌入式開發講座(第二講)[@more@]  第一節 引言 J2ME概述

  到目前為止,大部分人都已非常熟悉 Java 2平臺,以及 Sun如何把 Java技術分成三個版本(標準版、袖珍版以及企業版),Sun 在1999年6月時推出了 Java 2袖珍版 (J2ME)來滿足消費電子和嵌入裝置的需要。J2ME是為了那些使用有限的能源、有限的網路連線 (常常是無線連線)以及有限圖形使用者介面能力的裝置開發的。它最初的目標是 16位或 32位處理器,16 MHz時脈頻率,512K或更少記憶體的裝置。乍一看之下,J2ME就像一個沒有繫結明顯主題的鬆散的應用程式介面和技術規範。我們想透過說它不是什麼東西的方法來描述它,它不是一組用於桌上型電腦Java應用程式規範,如果你再觀察仔細一些,你會發現所有的 J2ME元件都圍繞一箇中心,這些中心被稱為configuration(配置 ,Sun的市場營銷資料也稱它們 design centers,設計中心),它們中間的每一個都是用於消費電子和嵌入裝置的特別的類。

  Connected limited device configuration(有限連線裝置配置,簡稱 CLDC ) 這個配置定義了 Java應用程式介面以及支援手持裝置的技術,就像 Sun的文件中所描述的那樣, " devices that you hold in your hand(你握在手中的裝置) " Palm序列手持裝置可能是這一領域的裝置的最好的例子,特別是它有開發 CLDC的功能以及 Palm裝置執行期系統可用。

  Connected device configuration(連線裝置配置 CDC ) 這個配置定義支援象 Sun文件中所說, " devices that you plug into plug into the wall(你插入牆的裝置)的裝置的應用程式介面和技術,這樣的裝置的一個例子可能就是機頂盒。

  這兩種配置不同的地方就在於它們應用於的裝置的能力, CLDC裝置的處理器能力有限 (與桌上型電腦系統比較 ),並且儲存器大小一般也只在128 KB到 512 KB之間, 與此同時, CDC系統就不同了,它可能有 32位或 64位處理器,以及有限的儲存容量,不過它的下限也得超過512K。 它遵循的原則就是,每個不同的能力硬體的配置都將被不同的虛擬機器支援。 基於 CDC的系統使用一個功能強勁的虛擬機器,而基於 CLDC系統的使用 KVM (我過會兒會介紹)。

  每個配置代表一種低水平的,基本的應用程式介面,在這兩個相似基礎之上是 profile用於特殊裝置的額外的應用程式介面。

  J2ME現在定義兩個配置, Connected Device configuration(連線裝置配置 CDC )和限制性更強的 Connected Limited Device Configuration (有限連線裝置配置)。 簡表的實現是 Java 應用程式介面的一個集合,用於適應被定義配置的應用程式介面提供的服務,簡表是一個完整的執行環境,一個在簡表上執行的應用程式不需要額外的支援類。

  J2ME沒有定義滿足這兩種配置的標準化使用者介面,Sun也承認現在的消費裝置多種多樣,使用者介面也各不一樣,所以定義一個可用於所有使用者的介面是一場失敗的戰爭。J2ME中的使用者介面定義在簡表中。

  第二節 J2ME的體系結構

  現在個人計算機系統的數量和種類已經發展到無法控制的地步,請你想一想,你編寫的程式執行在“資訊家電”舞臺的情景吧,這些資訊家電包括呼叫器,行動電話,像Palm這樣的個人數字助手(PDA),電視機頂盒,POS終端以及其他的消費電子裝置。現在全世界上光是手提電話生產商就有許多,更不用說別的家電裝置了,而且每一種家電裝置又有不同的特性和介面。所以,你可以想到, Java應用程式的輕便性以及能夠解決開發這麼許多不同的裝置程式的能力,使大家對J2ME有很大的期許。當然,為了更好的開發這些資訊家電,就要求把Java的精髓壓縮排一個非常小的程式包中,這就是J2ME。

  J2ME是一種透過許多部件和規範的技術, 這眾多的部件和規範幫助 J2ME來滿足這眾多的消費產品的不同的需要。和所有的爪哇程式語言技術一樣,在它的核心屬於一種虛擬機器。 就像使用所有 Java技術一樣,J2ME的核心也在一種虛擬機器中。 最初,用於 J2ME應用程式虛擬機器的被稱作 Kilobyte virtual machine或簡稱 KVM。就像它名稱的含義, KVM比較小,通常只有 128K或更少。這比起我們通常瞭解和使用的 Java 2標準版 Java虛擬機器 ( JVM )的 32 MB來說就小得多了。

  用於連線虛擬機器的是一系列配置和簡表,它們提供了用於特定 J2ME環境的類應用程式介面(見圖二)。 每個配置和簡表處理一般或具體的消費產品,配置和簡表規範是由多種多樣的裝置生產商和使用者共同開發並建立的。配置是用於一組通用裝置的最小的 Java平臺, 常常歸為一種橫向的裝置分組,相對來說,橫向分組裝置是那些共享相同的記憶體安排,通訊頻寬,能量需求以及使用者能力的裝置,一般認為配置能夠提供這眾多的裝置的所有需求。J2ME領域的新的開發者常常被這些事實困惑的, 事實上, Sun的第一個配置(現在只是一種配置的引用實現 )帶有稱為KVM的虛擬機器引用實現, KVM滿足配置的虛擬機器的必要條件。然而, Sun的 KVM也可以被另外一個虛擬機器所代替,現在, 正是因為配置和虛擬機器結合得有點緊密,因此導致了這麼多的混亂。

  另一方面,簡表完善了 配置,為某個具體的裝置家族或某個具體的工業片段應用程式提供更高的效能。 換言之, 簡表為具體的縱向市場的裝置比如說行動電話提供更多的效能。這裡的關鍵就是 簡表必須完善 配置, 沒有 配置和虛擬機器提供核心類應用程式介面和執行期環境的話,簡表也不會工作。

  通常,簡表為一種給定的垂直分組裝置提供使用者介面、輸入法、永續性機制。這類 簡表被認為是發展這些裝置應用程式的完整的工具包。我們見到最多的應用程式簡表的例子就行動電話簡表和個人數字助手(PDA)簡表,其他簡表為範圍寬廣的裝置提供非常特殊的功能或應用程式可移植性,這方面的例子就是提供遠端方法呼叫 ( RMI )功能的簡表和提供統一銀行事務的簡表。

  虛擬機器、 配置、 簡表…你是不是已經被搞迷糊了? 如果這樣的話,我們就來簡化一下J2ME體系結構吧。 如果你想為小型資訊家電編寫Java應用程式的話,你就需要兩個前提:一個配置和至少一個 簡表。 現在, 一般是配置捆綁了虛擬機器和一套針對你的平臺所能夠用的橫向分組裝置的Java類庫。其次,你至少還需要一個 簡表來為你的平臺提供附加的 Java類,這個 簡表通常會為你的裝置提供使用者介面、輸入和資料庫類。有了這兩個前提,你就了使用 Java為你的裝置編寫應用程式的基本的J2ME環境。

  第三節 詳細談談J2ME配置

  J2ME可以在好幾個不同的配置中進行配置。 就像先前提到的,每個配置為一組通用裝置提供最小的 Java平臺,到目前為止,只有兩種配置規範。透過 Java規範定義的這兩種配置是Connected Limited Device Configuration (有限連線裝置配置, CLDC )和 Connected Device Configuration (連線裝置配置 CDC )。

  CLDC是為使用較小的儲存容量的裝置設計的。 CLDC用於記憶體在128到 512K之間的消費電子裝置, 這一類別中典型代表的裝置包含呼叫器、行動電話、PDA和POS終端;而另一方面, CDC用於比 PC機小但是具有比 512K記憶體多的裝置,這一類裝置包括網際網路絡電視系統、機頂盒、POS系統、汽車導航以及娛樂系統。一般來說, CDC使小型裝置只要具有少量的資源,至少比桌上型電腦要少的資源就能進行Java程式設計,而CLDC使小型裝置所擁有的資源只要比一張智慧卡多一點就可以進行Java程式設計了。

  除了在容量大小和能力上對虛擬機器規定了必要條件,配置還規定了類應用程式介面要包含常見的java.io、 java.net、 java.util和 java.lang包,配置可能還要包括其他需要的程式包。

  CLDC

  CLDC起源可以追溯到1999年JavaOne大會上介紹的Sun的第一個袖珍版 Java和第一個 KVM以及相關的類庫,雖然 CLDC和所有的配置都滿足成為虛擬機器的條件,可它本身還不是虛擬機器,CLDC的引用實現只是包含在當前的分佈中的 KVM。

  根據規範中所說,執行 CLDC的裝置應該有 512K或更少的記憶體空間、一個有限的電源供給(通常是使用電池)、有限的或斷斷續續的網路連線性 ( 9600 bps或更少 )以及多樣化的使用者介面甚至沒有使用者介面。 通常說來,這個配置是為個人化的、移動的、有限連線資訊裝置而設計,比如呼叫器、行動電話和 PDA等。

  與 J2SE相比, CLDC缺少下列所說的這些特徵:
  AWT(抽象視窗開發包), Swing或其他圖形庫
  使用者定義類裝載器
  類例項的最終化
  弱的引用
  RMI
  Reflection(對映)

  CLDC有四個包: java.lang、 java.util、 java.io和 javax.microedition。 除了microedition包以外,其他的這幾個包都是J2SE包的核心子集,CLDC採用這些J2SE類庫,但是把其中一些在微型裝置中用不到類、屬性、方法去掉了。因此 CLDC類庫有許多細微的差別。 如果
  您想研究J2SE和 CLDC類庫之間的差別,請參閱相關文件,在此就不詳細說明了。

  想要理解為什麼CLDC去除這麼多J2SE中重要的類和特徵,請回想一下與 CLDC相關的兩條基本原理。首先,它只有 512K的記憶體空間, 而像RMI和對映需要的記憶體太大了。 其次,配置必須滿足為一組通用裝置提供最小的 Java平臺。 在個人移動資訊裝置領域中,許多系統都不能支援J2SE中的眾多的高階特徵。 例如,許多消費電子產品不能支援浮點數; 因此 Float(浮點類)和 Double(雙精度類)就被刪除了。 再看另外一個例子,許多系統沒有或不提供訪問一個檔案系統的功能或許可權。 因此與檔案有關的類也被丟棄了。又如,錯誤處理是一個代價非常高的過程處理,在許多消費電子裝置中,故障恢復是很難的甚至是不可能的。 所以在 CLDC中,許多錯誤處理類也被刪除了。

  java.microedition程式包提供了一個一般的結構來替代許多 J2SE網路輸入/輸出類。CLDC一般聯結器結構還定義了一個 Connector類,允許許多不同型別的連線能夠使用靜態方法,下表列出使用同一個Connector類建立和開啟五種不同型別的連線的方法:

  HTTP Connector.open(" ");

  套接字 Connector.open("socket://111.222.111.222:9000");

  通訊埠 Connector.open("comm:1;baudrate=9600");

  資料包 Connector.open("datagram://111.222.111.222");

  檔案 Connector.open("file:/xyz.dat");

  一般聯結器結構提供給應用程式開發者一個到通用低水平硬體的簡單的對映表。成功執行open語句將返回一個實現一般連線介面的物件。

  CDC

  CDC涵蓋了個人電腦與有至少 512K記憶體的小型裝置之間的中間地帶。現在,這一類裝置通常是共享的、固定的 (不用移動)網路連線資訊裝置,像電視機機頂盒,網路電視系統、網際網路電話與汽車導航/娛樂系統等等。

  首先,CDC基於 J2SE 1.3應用程式介面,包含所有定義在CLDC規範(包括javax.microedition程式包)中的Java語言應用程式介面。與CLDC相比, CLDC所有缺少的特性和類在 CDC中都被補齊,包含對映、最終化、所有的錯誤處理類、浮點數、屬性、輸入/輸出 (File、 FileInputStream等等 )和弱的引用。 一般說來, CDC中預期的類包括一個J2SE子集和一個完整的 CLDC超集就像使用所有的配置一樣,CDC有基層虛擬機器的具體的必要條件。 根據 CDC規範,基層虛擬機器必須提供實現完整的 Java虛擬機器的支援 。 如果虛擬機器實現有一個用於啟用裝置的本地方法的介面,它必須相容 JNI 1.1版本。 如果虛擬機器實現有一個除錯介面,它必須相容Java虛擬機器除錯介面 ( JVMDI )規範。 如果虛擬機器有一個簡表介面,它必須相容 Java虛擬機器簡表介面 ( JVMPI )規範。 可見,為了實現這些功能,CDC肯定會變得很大,就不能稱其為K虛擬機器了,因此,我們通常稱用於CDC的虛擬機器為 CVM,這裡的 C代表 compact、connected、consumer。

  第四節 談談J2ME簡表

  雖然配置為一組通用裝置提供了最小的 Java平臺,但是應用程式開發者感興趣的是為一個個別的裝置生產應用程式,當他們只是使用配置的話,他們編寫的應用程式就會有一些欠缺。 配置必須滿足所有的裝置的最小的要求, 使用者介面、輸入機制和資料永續性有高度地裝置具體性,每一種裝置都有自己的使用者介面、輸入機制和資料儲存方法,這些往往不在配置所滿足的最小要求的範圍之內。

  簡表為相同消費電子裝置的不同的生產商提供了標準化的 Java類庫, 事實上,雖然配置規範的開發由 Sun領導,但是許多簡表規範仍將繼續由特殊裝置的供應商領導。 比如說,Motorola領導了行動電話和呼叫器簡表規範的開發,又如 Palm 領導 PDA簡表的開發。

  現在,五個已知簡表已經有了規範, 記住,每個簡表的責任都是為了完善配置的不足,下表列出了這五個簡表:

  簡 表????????????????????完善配置
  Mobile information devices profile (MIDP)??行動電話和呼叫器 CLDC
  Personal digital assistant profile ?????Palm和Handspring的PDA 裝置 CLDC
  Foundation profile ?????????????用於所有不需要GUI的CDC裝置的標準簡表 CDC
  Personal profile ??????????????替代PersonalJava的Foundation完善的簡表 CDC
  RMI profile?????????????????提供RMI的Foundation完善的簡表 CDC
  
  現在我想談一談另一個Java類庫集,它現在差不多可以被認為是另一個簡表了。當Sun為Palm開發第一個KVM時,他們需要一組類來 開發Palm的演示程式。這套類庫被封裝進 com.sun.kjava 程式包, 在 CLDC早期的開發中,這些類被廣泛的使用來測試和演示 J2ME。因為 kjava是唯一的允許應用程式開發者使用 J2ME和 KVM開發應用程式的類,所以它就被廣泛使用了。甚至到了今天,一個用於 PDA或更特殊一點的Palm的簡表多已經在開發中,許多開發者仍然希望使用 kjava類來開發 PDA應用程式。儘管 kjava類不被支援,並且僅僅用於設計測試程式或演示程式,並且它們將被一個即將到來的簡表所替代,但是開發者們仍然熱衷於使用它來開發。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10901326/viewspace-965628/,如需轉載,請註明出處,否則將追究法律責任。

相關文章