明輝手游網(wǎng)中心:是一個免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺!

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

[摘要]第一節(jié) 引言 J2ME概述   到目前為止,大部分人都已非常熟悉 Java 2平臺,以及 Sun如何把 Java技術(shù)分成三個版本(標(biāo)準(zhǔn)版、袖珍版以及企業(yè)版),Sun 在1999年6月時推出了 Java 2袖珍版 (J2ME)來滿足消費(fèi)電子和嵌入設(shè)備的需要。J2ME是為了那些使用有限的能源、有限的網(wǎng)...
第一節(jié) 引言 J2ME概述

  到目前為止,大部分人都已非常熟悉 Java 2平臺,以及 Sun如何把 Java技術(shù)分成三個版本(標(biāo)準(zhǔn)版、袖珍版以及企業(yè)版),Sun 在1999年6月時推出了 Java 2袖珍版 (J2ME)來滿足消費(fèi)電子和嵌入設(shè)備的需要。J2ME是為了那些使用有限的能源、有限的網(wǎng)絡(luò)連接 (常常是無線連接)以及有限圖形用戶界面能力的設(shè)備開發(fā)的。它最初的目標(biāo)是 16位或 32位處理器,16 MHz時鐘頻率,512K或更少內(nèi)存的設(shè)備。乍一看之下,J2ME就像一個沒有綁定明顯主題的松散的應(yīng)用程序接口和技術(shù)規(guī)范。我們想通過說它不是什么東西的方法來描述它,它不是一組用于臺式機(jī)Java應(yīng)用程序規(guī)范,如果你再觀察仔細(xì)一些,你會發(fā)現(xiàn)所有的 J2ME組件都圍繞一個中心,這些中心被稱為configuration(配置 ,Sun的市場營銷資料也稱它們 design centers,設(shè)計中心),它們中間的每一個都是用于消費(fèi)電子和嵌入設(shè)備的特別的類。

  Connected limited device configuration(有限連接設(shè)備配置,簡稱 CLDC ) 這個配置定義了 Java應(yīng)用程序接口以及支持手持設(shè)備的技術(shù),就像 Sun的文檔中所描述的那樣, " devices that you hold in your hand(你握在手中的設(shè)備) " Palm序列手持設(shè)備可能是這一領(lǐng)域的設(shè)備的最好的例子,特別是它有開發(fā) CLDC的功能以及 Palm設(shè)備運(yùn)行期系統(tǒng)可用。

  Connected device configuration(連接設(shè)備配置 CDC ) 這個配置定義支持象 Sun文檔中所說, " devices that you plug into plug into the wall(你插入墻的設(shè)備)的設(shè)備的應(yīng)用程序接口和技術(shù),這樣的設(shè)備的一個例子可能就是機(jī)頂盒。

  這兩種配置不同的地方就在于它們應(yīng)用于的裝置的能力, CLDC設(shè)備的處理器能力有限 (與臺式機(jī)系統(tǒng)比較 ),并且存儲器大小一般也只在128 KB到 512 KB之間, 與此同時, CDC系統(tǒng)就不同了,它可能有 32位或 64位處理器,以及有限的存儲容量,不過它的下限也得超過512K。 它遵循的原則就是,每個不同的能力硬件的配置都將被不同的虛擬機(jī)支持。 基于 CDC的系統(tǒng)使用一個功能強(qiáng)勁的虛擬機(jī),而基于 CLDC系統(tǒng)的使用 KVM (我過會兒會介紹)。

  每個配置代表一種低水平的,基本的應(yīng)用程序接口,在這兩個相似基礎(chǔ)之上是 profile用于特殊設(shè)備的額外的應(yīng)用程序接口。

  J2ME現(xiàn)在定義兩個配置, Connected Device configuration(連接設(shè)備配置 CDC )和限制性更強(qiáng)的 Connected Limited Device Configuration (有限連接設(shè)備配置)。 簡表的實(shí)現(xiàn)是 Java 應(yīng)用程序接口的一個集合,用于適應(yīng)被定義配置的應(yīng)用程序接口提供的服務(wù),簡表是一個完整的運(yùn)行環(huán)境,一個在簡表上執(zhí)行的應(yīng)用程序不需要額外的支持類。

  J2ME沒有定義滿足這兩種配置的標(biāo)準(zhǔn)化用戶接口,Sun也承認(rèn)現(xiàn)在的消費(fèi)設(shè)備多種多樣,用戶界面也各不一樣,所以定義一個可用于所有用戶的界面是一場失敗的戰(zhàn)爭。J2ME中的用戶界面定義在簡表中。

  第二節(jié) J2ME的體系結(jié)構(gòu)

  現(xiàn)在個人計算機(jī)系統(tǒng)的數(shù)量和種類已經(jīng)發(fā)展到無法控制的地步,請你想一想,你編寫的程序運(yùn)行在“信息家電”舞臺的情景吧,這些信息家電包括呼叫器,行動電話,像Palm這樣的個人數(shù)字助手(PDA),電視機(jī)頂盒,POS終端以及其他的消費(fèi)電子設(shè)備。現(xiàn)在全世界上光是手提電話生產(chǎn)商就有許多,更不用說別的家電設(shè)備了,而且每一種家電設(shè)備又有不同的特性和界面。所以,你可以想到, Java應(yīng)用程序的輕便性以及能夠解決開發(fā)這么許多不同的設(shè)備程序的能力,使大家對J2ME有很大的期許。當(dāng)然,為了更好的開發(fā)這些信息家電,就要求把Java的精髓壓縮進(jìn)一個非常小的程序包中,這就是J2ME。

  J2ME是一種通過許多部件和規(guī)范的技術(shù), 這眾多的部件和規(guī)范幫助 J2ME來滿足這眾多的消費(fèi)產(chǎn)品的不同的需要。和所有的爪哇程式語言技術(shù)一樣,在它的核心屬于一種虛擬機(jī)。 就像使用所有 Java技術(shù)一樣,J2ME的核心也在一種虛擬機(jī)中。 最初,用于 J2ME應(yīng)用程序虛擬機(jī)的被稱作 Kilobyte virtual machine或簡稱 KVM。就像它名稱的含義, KVM比較小,通常只有 128K或更少。這比起我們通常了解和使用的 Java 2標(biāo)準(zhǔn)版 Java虛擬機(jī) ( JVM )的 32 MB來說就小得多了。

  用于連接虛擬機(jī)的是一系列配置和簡表,它們提供了用于特定 J2ME環(huán)境的類應(yīng)用程序接口(見圖二)。 每個配置和簡表處理一般或具體的消費(fèi)產(chǎn)品,配置和簡表規(guī)范是由多種多樣的設(shè)備生產(chǎn)商和用戶共同開發(fā)并建立的。配置是用于一組通用設(shè)備的最小的 Java平臺, 常常歸為一種橫向的設(shè)備分組,相對來說,橫向分組設(shè)備是那些共享相同的內(nèi)存安排,通信帶寬,能量需求以及用戶能力的設(shè)備,一般認(rèn)為配置能夠提供這眾多的設(shè)備的所有需求。J2ME領(lǐng)域的新的開發(fā)者常常被這些事實(shí)困惑的, 事實(shí)上, Sun的第一個配置(現(xiàn)在只是一種配置的引用實(shí)現(xiàn) )帶有稱為KVM的虛擬機(jī)引用實(shí)現(xiàn), KVM滿足配置的虛擬機(jī)的必要條件。然而, Sun的 KVM也可以被另外一個虛擬機(jī)所代替,現(xiàn)在, 正是因?yàn)榕渲煤吞摂M機(jī)結(jié)合得有點(diǎn)緊密,因此導(dǎo)致了這么多的混亂。

  另一方面,簡表完善了 配置,為某個具體的設(shè)備家族或某個具體的工業(yè)片段應(yīng)用程序提供更高的性能。 換言之, 簡表為具體的縱向市場的設(shè)備比如說行動電話提供更多的性能。這里的關(guān)鍵就是 簡表必須完善 配置, 沒有 配置和虛擬機(jī)提供核心類應(yīng)用程序接口和運(yùn)行期環(huán)境的話,簡表也不會工作。

  通常,簡表為一種給定的垂直分組設(shè)備提供用戶界面、輸入法、持久性機(jī)制。這類 簡表被認(rèn)為是發(fā)展這些設(shè)備應(yīng)用程序的完整的工具包。我們見到最多的應(yīng)用程序簡表的例子就移動電話簡表和個人數(shù)字助手(PDA)簡表,其他簡表為范圍寬廣的設(shè)備提供非常特殊的功能或應(yīng)用程序可移植性,這方面的例子就是提供遠(yuǎn)程方法調(diào)用 ( RMI )功能的簡表和提供統(tǒng)一銀行事務(wù)的簡表。

  虛擬機(jī)、 配置、 簡表…你是不是已經(jīng)被搞迷糊了? 如果這樣的話,我們就來簡化一下J2ME體系結(jié)構(gòu)吧。 如果你想為小型信息家電編寫Java應(yīng)用程序的話,你就需要兩個前提:一個配置和至少一個 簡表。 現(xiàn)在, 一般是配置捆綁了虛擬機(jī)和一套針對你的平臺所能夠用的橫向分組設(shè)備的Java類庫。其次,你至少還需要一個 簡表來為你的平臺提供附加的 Java類,這個 簡表通常會為你的設(shè)備提供用戶界面、輸入和數(shù)據(jù)庫類。有了這兩個前提,你就了使用 Java為你的設(shè)備編寫應(yīng)用程序的基本的J2ME環(huán)境。

  第三節(jié) 詳細(xì)談?wù)凧2ME配置

  J2ME可以在好幾個不同的配置中進(jìn)行配置。 就像先前提到的,每個配置為一組通用設(shè)備提供最小的 Java平臺,到目前為止,只有兩種配置規(guī)范。通過 Java規(guī)范定義的這兩種配置是Connected Limited Device Configuration (有限連接設(shè)備配置, CLDC )和 Connected Device Configuration (連接設(shè)備配置 CDC )。

  CLDC是為使用較小的存儲容量的設(shè)備設(shè)計的。 CLDC用于內(nèi)存在128到 512K之間的消費(fèi)電子設(shè)備, 這一類別中典型代表的設(shè)備包含呼叫器、行動電話、PDA和POS終端;而另一方面, CDC用于比 PC機(jī)小但是具有比 512K內(nèi)存多的設(shè)備,這一類設(shè)備包括互聯(lián)網(wǎng)絡(luò)電視系統(tǒng)、機(jī)頂盒、POS系統(tǒng)、汽車導(dǎo)航以及娛樂系統(tǒng)。一般來說, CDC使小型設(shè)備只要具有少量的資源,至少比臺式機(jī)要少的資源就能進(jìn)行Java編程,而CLDC使小型設(shè)備所擁有的資源只要比一張智能卡多一點(diǎn)就可以進(jìn)行Java編程了。

  除了在容量大小和能力上對虛擬機(jī)規(guī)定了必要條件,配置還規(guī)定了類應(yīng)用程序接口要包含常見的java.io、 java.net、 java.util和 java.lang包,配置可能還要包括其他需要的程序包。

  CLDC

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

  根據(jù)規(guī)范中所說,運(yùn)行 CLDC的設(shè)備應(yīng)該有 512K或更少的內(nèi)存空間、一個有限的電源供給(通常是使用電池)、有限的或斷斷續(xù)續(xù)的網(wǎng)絡(luò)連接性 ( 9600 bps或更少 )以及多樣化的用戶界面甚至沒有用戶界面。 通常說來,這個配置是為個人化的、移動的、有限連接信息設(shè)備而設(shè)計,比如呼叫器、移動電話和 PDA等。

  與 J2SE相比, CLDC缺少下列所說的這些特征:
  AWT(抽象窗口開發(fā)包), Swing或其他圖形庫
  用戶定義類裝載器
  類實(shí)例的最終化
  弱的引用
  RMI
  Reflection(映射)

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

  想要理解為什么CLDC去除這么多J2SE中重要的類和特征,請回想一下與 CLDC相關(guān)的兩條基本原理。首先,它只有 512K的內(nèi)存空間, 而像RMI和映射需要的內(nèi)存太大了。 其次,配置必須滿足為一組通用設(shè)備提供最小的 Java平臺。 在個人移動信息設(shè)備領(lǐng)域中,許多系統(tǒng)都不能支持J2SE中的眾多的高級特征。 例如,許多消費(fèi)電子產(chǎn)品不能支持浮點(diǎn)數(shù); 因此 Float(浮點(diǎn)類)和 Double(雙精度類)就被刪除了。 再看另外一個例子,許多系統(tǒng)沒有或不提供訪問一個文件系統(tǒng)的功能或權(quán)限。 因此與文件有關(guān)的類也被丟棄了。又如,錯誤處理是一個代價非常高的過程處理,在許多消費(fèi)電子設(shè)備中,故障恢復(fù)是很難的甚至是不可能的。 所以在 CLDC中,許多錯誤處理類也被刪除了。

  java.microedition程序包提供了一個一般的結(jié)構(gòu)來替代許多 J2SE網(wǎng)絡(luò)輸入/輸出類。CLDC一般連接器結(jié)構(gòu)還定義了一個 Connector類,允許許多不同類型的連接能夠使用靜態(tài)方法,下表列出使用同一個Connector類創(chuàng)建和打開五種不同類型的連接的方法:

  HTTP Connector.open(" http://www.javafan.net ");

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

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

  數(shù)據(jù)報 Connector.open("datagram://111.222.111.222");

  文件 Connector.open("file:/xyz.dat");

  一般連接器結(jié)構(gòu)提供給應(yīng)用程序開發(fā)者一個到通用低水平硬件的簡單的映射表。成功執(zhí)行open語句將返回一個實(shí)現(xiàn)一般連接界面的對象。

  CDC

  CDC涵蓋了個人電腦與有至少 512K內(nèi)存的小型設(shè)備之間的中間地帶。現(xiàn)在,這一類設(shè)備通常是共享的、固定的 (不用移動)網(wǎng)絡(luò)連接信息設(shè)備,像電視機(jī)機(jī)頂盒,網(wǎng)絡(luò)電視系統(tǒng)、互聯(lián)網(wǎng)電話與汽車導(dǎo)航/娛樂系統(tǒng)等等。

  首先,CDC基于 J2SE 1.3應(yīng)用程序接口,包含所有定義在CLDC規(guī)范(包括javax.microedition程序包)中的Java語言應(yīng)用程序接口。與CLDC相比, CLDC所有缺少的特性和類在 CDC中都被補(bǔ)齊,包含映射、最終化、所有的錯誤處理類、浮點(diǎn)數(shù)、屬性、輸入/輸出 (File、 FileInputStream等等 )和弱的引用。 一般說來, CDC中預(yù)期的類包括一個J2SE子集和一個完整的 CLDC超集就像使用所有的配置一樣,CDC有基層虛擬機(jī)的具體的必要條件。 根據(jù) CDC規(guī)范,基層虛擬機(jī)必須提供實(shí)現(xiàn)完整的 Java虛擬機(jī)的支持 。 如果虛擬機(jī)實(shí)現(xiàn)有一個用于激活設(shè)備的本地方法的界面,它必須兼容 JNI 1.1版本。 如果虛擬機(jī)實(shí)現(xiàn)有一個調(diào)試界面,它必須兼容Java虛擬機(jī)調(diào)試界面 ( JVMDI )規(guī)范。 如果虛擬機(jī)有一個簡表界面,它必須兼容 Java虛擬機(jī)簡表界面 ( JVMPI )規(guī)范。 可見,為了實(shí)現(xiàn)這些功能,CDC肯定會變得很大,就不能稱其為K虛擬機(jī)了,因此,我們通常稱用于CDC的虛擬機(jī)為 CVM,這里的 C代表 compact、connected、consumer。

  第四節(jié) 談?wù)凧2ME簡表

  雖然配置為一組通用設(shè)備提供了最小的 Java平臺,但是應(yīng)用程序開發(fā)者感興趣的是為一個個別的設(shè)備生產(chǎn)應(yīng)用程序,當(dāng)他們只是使用配置的話,他們編寫的應(yīng)用程序就會有一些欠缺。 配置必須滿足所有的設(shè)備的最小的要求, 用戶界面、輸入機(jī)制和數(shù)據(jù)持久性有高度地設(shè)備具體性,每一種設(shè)備都有自己的用戶界面、輸入機(jī)制和數(shù)據(jù)存儲方法,這些往往不在配置所滿足的最小要求的范圍之內(nèi)。

  簡表為相同消費(fèi)電子設(shè)備的不同的生產(chǎn)商提供了標(biāo)準(zhǔn)化的 Java類庫, 事實(shí)上,雖然配置規(guī)范的開發(fā)由 Sun領(lǐng)導(dǎo),但是許多簡表規(guī)范仍將繼續(xù)由特殊設(shè)備的供應(yīng)商領(lǐng)導(dǎo)。 比如說,Motorola領(lǐng)導(dǎo)了行動電話和呼叫器簡表規(guī)范的開發(fā),又如 Palm 領(lǐng)導(dǎo) PDA簡表的開發(fā)。

  現(xiàn)在,五個已知簡表已經(jīng)有了規(guī)范, 記住,每個簡表的責(zé)任都是為了完善配置的不足,下表列出了這五個簡表:

  簡 表完善配置
  Mobile information devices profile (MIDP)移動電話和呼叫器 CLDC
  Personal digital assistant profile Palm和Handspring的PDA 設(shè)備 CLDC
  Foundation profile 用于所有不需要GUI的CDC設(shè)備的標(biāo)準(zhǔn)簡表 CDC
  Personal profile 替代PersonalJava的Foundation完善的簡表 CDC
  RMI profile提供RMI的Foundation完善的簡表 CDC
  
  現(xiàn)在我想談一談另一個Java類庫集,它現(xiàn)在差不多可以被認(rèn)為是另一個簡表了。當(dāng)Sun為Palm開發(fā)第一個KVM時,他們需要一組類來 開發(fā)Palm的演示程序。這套類庫被封裝進(jìn) com.sun.kjava 程序包, 在 CLDC早期的開發(fā)中,這些類被廣泛的使用來測試和演示 J2ME。因?yàn)?kjava是唯一的允許應(yīng)用程序開發(fā)者使用 J2ME和 KVM開發(fā)應(yīng)用程序的類,所以它就被廣泛使用了。甚至到了今天,一個用于 PDA或更特殊一點(diǎn)的Palm的簡表多已經(jīng)在開發(fā)中,許多開發(fā)者仍然希望使用 kjava類來開發(fā) PDA應(yīng)用程序。盡管 kjava類不被支持,并且僅僅用于設(shè)計測試程序或演示程序,并且它們將被一個即將到來的簡表所替代,但是開發(fā)者們?nèi)匀粺嶂杂谑褂盟鼇黹_發(fā)。