Java嵌入式開發(fā)講座(第二講)
發(fā)表時(shí)間:2024-05-22 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]第一節(jié) 引言 J2ME概述 到目前為止,大部分人都已非常熟悉 Java 2平臺(tái),以及 Sun如何把 Java技術(shù)分成三個(gè)版本(標(biāo)準(zhǔn)版、袖珍版以及企業(yè)版),Sun 在1999年6月時(shí)推出了 Java 2袖珍版 (J2ME)來滿足消費(fèi)電子和嵌入設(shè)備的需要。J2ME是為了那些使用有限的能源、有限的網(wǎng)...
第一節(jié) 引言 J2ME概述
到目前為止,大部分人都已非常熟悉 Java 2平臺(tái),以及 Sun如何把 Java技術(shù)分成三個(gè)版本(標(biāo)準(zhǔn)版、袖珍版以及企業(yè)版),Sun 在1999年6月時(shí)推出了 Java 2袖珍版 (J2ME)來滿足消費(fèi)電子和嵌入設(shè)備的需要。J2ME是為了那些使用有限的能源、有限的網(wǎng)絡(luò)連接 (常常是無線連接)以及有限圖形用戶界面能力的設(shè)備開發(fā)的。它最初的目標(biāo)是 16位或 32位處理器,16 MHz時(shí)鐘頻率,512K或更少內(nèi)存的設(shè)備。乍一看之下,J2ME就像一個(gè)沒有綁定明顯主題的松散的應(yīng)用程序接口和技術(shù)規(guī)范。我們想通過說它不是什么東西的方法來描述它,它不是一組用于臺(tái)式機(jī)Java應(yīng)用程序規(guī)范,如果你再觀察仔細(xì)一些,你會(huì)發(fā)現(xiàn)所有的 J2ME組件都圍繞一個(gè)中心,這些中心被稱為configuration(配置 ,Sun的市場(chǎng)營(yíng)銷資料也稱它們 design centers,設(shè)計(jì)中心),它們中間的每一個(gè)都是用于消費(fèi)電子和嵌入設(shè)備的特別的類。
Connected limited device configuration(有限連接設(shè)備配置,簡(jiǎn)稱 CLDC ) 這個(gè)配置定義了 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 ) 這個(gè)配置定義支持象 Sun文檔中所說, " devices that you plug into plug into the wall(你插入墻的設(shè)備)的設(shè)備的應(yīng)用程序接口和技術(shù),這樣的設(shè)備的一個(gè)例子可能就是機(jī)頂盒。
這兩種配置不同的地方就在于它們應(yīng)用于的裝置的能力, CLDC設(shè)備的處理器能力有限 (與臺(tái)式機(jī)系統(tǒng)比較 ),并且存儲(chǔ)器大小一般也只在128 KB到 512 KB之間, 與此同時(shí), CDC系統(tǒng)就不同了,它可能有 32位或 64位處理器,以及有限的存儲(chǔ)容量,不過它的下限也得超過512K。 它遵循的原則就是,每個(gè)不同的能力硬件的配置都將被不同的虛擬機(jī)支持。 基于 CDC的系統(tǒng)使用一個(gè)功能強(qiáng)勁的虛擬機(jī),而基于 CLDC系統(tǒng)的使用 KVM (我過會(huì)兒會(huì)介紹)。
每個(gè)配置代表一種低水平的,基本的應(yīng)用程序接口,在這兩個(gè)相似基礎(chǔ)之上是 profile用于特殊設(shè)備的額外的應(yīng)用程序接口。
J2ME現(xiàn)在定義兩個(gè)配置, Connected Device configuration(連接設(shè)備配置 CDC )和限制性更強(qiáng)的 Connected Limited Device Configuration (有限連接設(shè)備配置)。 簡(jiǎn)表的實(shí)現(xiàn)是 Java 應(yīng)用程序接口的一個(gè)集合,用于適應(yīng)被定義配置的應(yīng)用程序接口提供的服務(wù),簡(jiǎn)表是一個(gè)完整的運(yùn)行環(huán)境,一個(gè)在簡(jiǎn)表上執(zhí)行的應(yīng)用程序不需要額外的支持類。
J2ME沒有定義滿足這兩種配置的標(biāo)準(zhǔn)化用戶接口,Sun也承認(rèn)現(xiàn)在的消費(fèi)設(shè)備多種多樣,用戶界面也各不一樣,所以定義一個(gè)可用于所有用戶的界面是一場(chǎng)失敗的戰(zhàn)爭(zhēng)。J2ME中的用戶界面定義在簡(jiǎn)表中。
第二節(jié) J2ME的體系結(jié)構(gòu)
現(xiàn)在個(gè)人計(jì)算機(jī)系統(tǒng)的數(shù)量和種類已經(jīng)發(fā)展到無法控制的地步,請(qǐng)你想一想,你編寫的程序運(yùn)行在“信息家電”舞臺(tái)的情景吧,這些信息家電包括呼叫器,行動(dòng)電話,像Palm這樣的個(gè)人數(shù)字助手(PDA),電視機(jī)頂盒,POS終端以及其他的消費(fèi)電子設(shè)備。現(xiàn)在全世界上光是手提電話生產(chǎn)商就有許多,更不用說別的家電設(shè)備了,而且每一種家電設(shè)備又有不同的特性和界面。所以,你可以想到, Java應(yīng)用程序的輕便性以及能夠解決開發(fā)這么許多不同的設(shè)備程序的能力,使大家對(duì)J2ME有很大的期許。當(dāng)然,為了更好的開發(fā)這些信息家電,就要求把Java的精髓壓縮進(jìn)一個(gè)非常小的程序包中,這就是J2ME。
J2ME是一種通過許多部件和規(guī)范的技術(shù), 這眾多的部件和規(guī)范幫助 J2ME來滿足這眾多的消費(fèi)產(chǎn)品的不同的需要。和所有的爪哇程式語言技術(shù)一樣,在它的核心屬于一種虛擬機(jī)。 就像使用所有 Java技術(shù)一樣,J2ME的核心也在一種虛擬機(jī)中。 最初,用于 J2ME應(yīng)用程序虛擬機(jī)的被稱作 Kilobyte virtual machine或簡(jiǎn)稱 KVM。就像它名稱的含義, KVM比較小,通常只有 128K或更少。這比起我們通常了解和使用的 Java 2標(biāo)準(zhǔn)版 Java虛擬機(jī) ( JVM )的 32 MB來說就小得多了。
用于連接虛擬機(jī)的是一系列配置和簡(jiǎn)表,它們提供了用于特定 J2ME環(huán)境的類應(yīng)用程序接口(見圖二)。 每個(gè)配置和簡(jiǎn)表處理一般或具體的消費(fèi)產(chǎn)品,配置和簡(jiǎn)表規(guī)范是由多種多樣的設(shè)備生產(chǎn)商和用戶共同開發(fā)并建立的。配置是用于一組通用設(shè)備的最小的 Java平臺(tái), 常常歸為一種橫向的設(shè)備分組,相對(duì)來說,橫向分組設(shè)備是那些共享相同的內(nèi)存安排,通信帶寬,能量需求以及用戶能力的設(shè)備,一般認(rèn)為配置能夠提供這眾多的設(shè)備的所有需求。J2ME領(lǐng)域的新的開發(fā)者常常被這些事實(shí)困惑的, 事實(shí)上, Sun的第一個(gè)配置(現(xiàn)在只是一種配置的引用實(shí)現(xiàn) )帶有稱為KVM的虛擬機(jī)引用實(shí)現(xiàn), KVM滿足配置的虛擬機(jī)的必要條件。然而, Sun的 KVM也可以被另外一個(gè)虛擬機(jī)所代替,現(xiàn)在, 正是因?yàn)榕渲煤吞摂M機(jī)結(jié)合得有點(diǎn)緊密,因此導(dǎo)致了這么多的混亂。
另一方面,簡(jiǎn)表完善了 配置,為某個(gè)具體的設(shè)備家族或某個(gè)具體的工業(yè)片段應(yīng)用程序提供更高的性能。 換言之, 簡(jiǎn)表為具體的縱向市場(chǎng)的設(shè)備比如說行動(dòng)電話提供更多的性能。這里的關(guān)鍵就是 簡(jiǎn)表必須完善 配置, 沒有 配置和虛擬機(jī)提供核心類應(yīng)用程序接口和運(yùn)行期環(huán)境的話,簡(jiǎn)表也不會(huì)工作。
通常,簡(jiǎn)表為一種給定的垂直分組設(shè)備提供用戶界面、輸入法、持久性機(jī)制。這類 簡(jiǎn)表被認(rèn)為是發(fā)展這些設(shè)備應(yīng)用程序的完整的工具包。我們見到最多的應(yīng)用程序簡(jiǎn)表的例子就移動(dòng)電話簡(jiǎn)表和個(gè)人數(shù)字助手(PDA)簡(jiǎn)表,其他簡(jiǎn)表為范圍寬廣的設(shè)備提供非常特殊的功能或應(yīng)用程序可移植性,這方面的例子就是提供遠(yuǎn)程方法調(diào)用 ( RMI )功能的簡(jiǎn)表和提供統(tǒng)一銀行事務(wù)的簡(jiǎn)表。
虛擬機(jī)、 配置、 簡(jiǎn)表…你是不是已經(jīng)被搞迷糊了? 如果這樣的話,我們就來簡(jiǎn)化一下J2ME體系結(jié)構(gòu)吧。 如果你想為小型信息家電編寫Java應(yīng)用程序的話,你就需要兩個(gè)前提:一個(gè)配置和至少一個(gè) 簡(jiǎn)表。 現(xiàn)在, 一般是配置捆綁了虛擬機(jī)和一套針對(duì)你的平臺(tái)所能夠用的橫向分組設(shè)備的Java類庫。其次,你至少還需要一個(gè) 簡(jiǎn)表來為你的平臺(tái)提供附加的 Java類,這個(gè) 簡(jiǎn)表通常會(huì)為你的設(shè)備提供用戶界面、輸入和數(shù)據(jù)庫類。有了這兩個(gè)前提,你就了使用 Java為你的設(shè)備編寫應(yīng)用程序的基本的J2ME環(huán)境。
第三節(jié) 詳細(xì)談?wù)凧2ME配置
J2ME可以在好幾個(gè)不同的配置中進(jìn)行配置。 就像先前提到的,每個(gè)配置為一組通用設(shè)備提供最小的 Java平臺(tái),到目前為止,只有兩種配置規(guī)范。通過 Java規(guī)范定義的這兩種配置是Connected Limited Device Configuration (有限連接設(shè)備配置, CLDC )和 Connected Device Configuration (連接設(shè)備配置 CDC )。
CLDC是為使用較小的存儲(chǔ)容量的設(shè)備設(shè)計(jì)的。 CLDC用于內(nèi)存在128到 512K之間的消費(fèi)電子設(shè)備, 這一類別中典型代表的設(shè)備包含呼叫器、行動(dòng)電話、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è)備只要具有少量的資源,至少比臺(tái)式機(jī)要少的資源就能進(jìn)行Java編程,而CLDC使小型設(shè)備所擁有的資源只要比一張智能卡多一點(diǎn)就可以進(jìn)行Java編程了。
除了在容量大小和能力上對(duì)虛擬機(jī)規(guī)定了必要條件,配置還規(guī)定了類應(yīng)用程序接口要包含常見的java.io、 java.net、 java.util和 java.lang包,配置可能還要包括其他需要的程序包。
CLDC
CLDC起源可以追溯到1999年JavaOne大會(huì)上介紹的Sun的第一個(gè)袖珍版 Java和第一個(gè) KVM以及相關(guān)的類庫,雖然 CLDC和所有的配置都滿足成為虛擬機(jī)的條件,可它本身還不是虛擬機(jī),CLDC的引用實(shí)現(xiàn)只是包含在當(dāng)前的分布中的 KVM。
根據(jù)規(guī)范中所說,運(yùn)行 CLDC的設(shè)備應(yīng)該有 512K或更少的內(nèi)存空間、一個(gè)有限的電源供給(通常是使用電池)、有限的或斷斷續(xù)續(xù)的網(wǎng)絡(luò)連接性 ( 9600 bps或更少 )以及多樣化的用戶界面甚至沒有用戶界面。 通常說來,這個(gè)配置是為個(gè)人化的、移動(dòng)的、有限連接信息設(shè)備而設(shè)計(jì),比如呼叫器、移動(dòng)電話和 PDA等。
與 J2SE相比, CLDC缺少下列所說的這些特征:
AWT(抽象窗口開發(fā)包), Swing或其他圖形庫
用戶定義類裝載器
類實(shí)例的最終化
弱的引用
RMI
Reflection(映射)
CLDC有四個(gè)包: java.lang、 java.util、 java.io和 javax.microedition。 除了microedition包以外,其他的這幾個(gè)包都是J2SE包的核心子集,CLDC采用這些J2SE類庫,但是把其中一些在微型設(shè)備中用不到類、屬性、方法去掉了。因此 CLDC類庫有許多細(xì)微的差別。 如果
您想研究J2SE和 CLDC類庫之間的差別,請(qǐng)參閱相關(guān)文檔,在此就不詳細(xì)說明了。
想要理解為什么CLDC去除這么多J2SE中重要的類和特征,請(qǐng)回想一下與 CLDC相關(guān)的兩條基本原理。首先,它只有 512K的內(nèi)存空間, 而像RMI和映射需要的內(nèi)存太大了。 其次,配置必須滿足為一組通用設(shè)備提供最小的 Java平臺(tái)。 在個(gè)人移動(dòng)信息設(shè)備領(lǐng)域中,許多系統(tǒng)都不能支持J2SE中的眾多的高級(jí)特征。 例如,許多消費(fèi)電子產(chǎn)品不能支持浮點(diǎn)數(shù); 因此 Float(浮點(diǎn)類)和 Double(雙精度類)就被刪除了。 再看另外一個(gè)例子,許多系統(tǒng)沒有或不提供訪問一個(gè)文件系統(tǒng)的功能或權(quán)限。 因此與文件有關(guān)的類也被丟棄了。又如,錯(cuò)誤處理是一個(gè)代價(jià)非常高的過程處理,在許多消費(fèi)電子設(shè)備中,故障恢復(fù)是很難的甚至是不可能的。 所以在 CLDC中,許多錯(cuò)誤處理類也被刪除了。
java.microedition程序包提供了一個(gè)一般的結(jié)構(gòu)來替代許多 J2SE網(wǎng)絡(luò)輸入/輸出類。CLDC一般連接器結(jié)構(gòu)還定義了一個(gè) Connector類,允許許多不同類型的連接能夠使用靜態(tài)方法,下表列出使用同一個(gè)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ù)報(bào) Connector.open("datagram://111.222.111.222");
文件 Connector.open("file:/xyz.dat");
一般連接器結(jié)構(gòu)提供給應(yīng)用程序開發(fā)者一個(gè)到通用低水平硬件的簡(jiǎn)單的映射表。成功執(zhí)行open語句將返回一個(gè)實(shí)現(xiàn)一般連接界面的對(duì)象。
CDC
CDC涵蓋了個(gè)人電腦與有至少 512K內(nèi)存的小型設(shè)備之間的中間地帶。現(xiàn)在,這一類設(shè)備通常是共享的、固定的 (不用移動(dòng))網(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ǔ)齊,包含映射、最終化、所有的錯(cuò)誤處理類、浮點(diǎn)數(shù)、屬性、輸入/輸出 (File、 FileInputStream等等 )和弱的引用。 一般說來, CDC中預(yù)期的類包括一個(gè)J2SE子集和一個(gè)完整的 CLDC超集就像使用所有的配置一樣,CDC有基層虛擬機(jī)的具體的必要條件。 根據(jù) CDC規(guī)范,基層虛擬機(jī)必須提供實(shí)現(xiàn)完整的 Java虛擬機(jī)的支持 。 如果虛擬機(jī)實(shí)現(xiàn)有一個(gè)用于激活設(shè)備的本地方法的界面,它必須兼容 JNI 1.1版本。 如果虛擬機(jī)實(shí)現(xiàn)有一個(gè)調(diào)試界面,它必須兼容Java虛擬機(jī)調(diào)試界面 ( JVMDI )規(guī)范。 如果虛擬機(jī)有一個(gè)簡(jiǎn)表界面,它必須兼容 Java虛擬機(jī)簡(jiǎn)表界面 ( JVMPI )規(guī)范。 可見,為了實(shí)現(xiàn)這些功能,CDC肯定會(huì)變得很大,就不能稱其為K虛擬機(jī)了,因此,我們通常稱用于CDC的虛擬機(jī)為 CVM,這里的 C代表 compact、connected、consumer。
第四節(jié) 談?wù)凧2ME簡(jiǎn)表
雖然配置為一組通用設(shè)備提供了最小的 Java平臺(tái),但是應(yīng)用程序開發(fā)者感興趣的是為一個(gè)個(gè)別的設(shè)備生產(chǎn)應(yīng)用程序,當(dāng)他們只是使用配置的話,他們編寫的應(yīng)用程序就會(huì)有一些欠缺。 配置必須滿足所有的設(shè)備的最小的要求, 用戶界面、輸入機(jī)制和數(shù)據(jù)持久性有高度地設(shè)備具體性,每一種設(shè)備都有自己的用戶界面、輸入機(jī)制和數(shù)據(jù)存儲(chǔ)方法,這些往往不在配置所滿足的最小要求的范圍之內(nèi)。
簡(jiǎn)表為相同消費(fèi)電子設(shè)備的不同的生產(chǎn)商提供了標(biāo)準(zhǔn)化的 Java類庫, 事實(shí)上,雖然配置規(guī)范的開發(fā)由 Sun領(lǐng)導(dǎo),但是許多簡(jiǎn)表規(guī)范仍將繼續(xù)由特殊設(shè)備的供應(yīng)商領(lǐng)導(dǎo)。 比如說,Motorola領(lǐng)導(dǎo)了行動(dòng)電話和呼叫器簡(jiǎn)表規(guī)范的開發(fā),又如 Palm 領(lǐng)導(dǎo) PDA簡(jiǎn)表的開發(fā)。
現(xiàn)在,五個(gè)已知簡(jiǎn)表已經(jīng)有了規(guī)范, 記住,每個(gè)簡(jiǎn)表的責(zé)任都是為了完善配置的不足,下表列出了這五個(gè)簡(jiǎn)表:
簡(jiǎn) 表完善配置
Mobile information devices profile (MIDP)移動(dòng)電話和呼叫器 CLDC
Personal digital assistant profile Palm和Handspring的PDA 設(shè)備 CLDC
Foundation profile 用于所有不需要GUI的CDC設(shè)備的標(biāo)準(zhǔn)簡(jiǎn)表 CDC
Personal profile 替代PersonalJava的Foundation完善的簡(jiǎn)表 CDC
RMI profile提供RMI的Foundation完善的簡(jiǎn)表 CDC
現(xiàn)在我想談一談另一個(gè)Java類庫集,它現(xiàn)在差不多可以被認(rèn)為是另一個(gè)簡(jiǎn)表了。當(dāng)Sun為Palm開發(fā)第一個(gè)KVM時(shí),他們需要一組類來 開發(fā)Palm的演示程序。這套類庫被封裝進(jìn) com.sun.kjava 程序包, 在 CLDC早期的開發(fā)中,這些類被廣泛的使用來測(cè)試和演示 J2ME。因?yàn)?kjava是唯一的允許應(yīng)用程序開發(fā)者使用 J2ME和 KVM開發(fā)應(yīng)用程序的類,所以它就被廣泛使用了。甚至到了今天,一個(gè)用于 PDA或更特殊一點(diǎn)的Palm的簡(jiǎn)表多已經(jīng)在開發(fā)中,許多開發(fā)者仍然希望使用 kjava類來開發(fā) PDA應(yīng)用程序。盡管 kjava類不被支持,并且僅僅用于設(shè)計(jì)測(cè)試程序或演示程序,并且它們將被一個(gè)即將到來的簡(jiǎn)表所替代,但是開發(fā)者們?nèi)匀粺嶂杂谑褂盟鼇黹_發(fā)。