編程高手

          BlogJava 首頁 新隨筆 聯系 聚合 管理
            3 Posts :: 0 Stories :: 0 Comments :: 0 Trackbacks

          2009年10月19日 #

           

          J2ME的適用范圍很廣,而且針對J2ME的規范也在增加,很多人因為對各種規范的作用不了解造成對J2ME體系的誤解。本文主要講述一下 J2ME 的結構和構成,同時對一些容易混淆的概念進行解釋。
          J2ME是什么?
          很多人把J2ME等同于手機程序開發,其實這是一個非常錯誤的說法。也有人認為J2ME是一個標準,一個規范,這同樣是不正確的。
          Sun 公司將 J2ME (Java 2 Micro Edition,Java 2微型版)定義為“一種以廣泛的消費性產品為目標的、高度優化的 Java 運行時環境”。自從 1999 年 6 月在 JavaOne Developer Conference 上聲明之后,J2ME 進入了小型設備開發的行列。通過 Java 的特性,遵循 J2ME 規范開發的 Java 程序可以運行在各種不同的小型設備上。
          J2ME是Sun公司為嵌入式開發所定義的一個框架,一系列標準的規范所組成。所以J2ME是一個協議簇,而不是單一的規范。
          J2ME是一個非常大的概念,下面的一幅圖可以看看J2ME的適用范圍。

          圖1
          圖中的CDC 和CLDC 是支持J2ME的兩類設備的配置的簡稱,分別是:
          ? ?CDC (Connected Device Configuration,連接設備配置),運行在這一配置上的程序稱為J2ME Application,在CVM上進行解釋。
          ? ?CLDC(Connected Limited Device Configuration,連接限制設備配置),運行在這一配置上的程序稱為MIDlet ,在KVM上進行解釋。
          可以把CDC 和CLDC 理解為對硬件的定義,就如同PC機和小型機一樣,這些設備提供Java程序運行的硬件環境。
          在 J2ME 中有兩類虛擬機:CVM (C Virtual Machine,C虛擬機)與 KVM (K Virtual Machine,K虛擬機)。KVM 和 CVM均可被看作是一種 Java 虛擬機,是 JVM 的子集,在功能上都是 JVM 的縮減版。這兩類虛擬機的適用范圍并不相同,簡單地說,CVM 的功能比KVM 功能更為強大。
          這里再補充一點,J2ME還包括對了Java Card 的定義,用于各類IC卡。JavaCard 和CDC/CLDC在J2ME中是相同的地位。
          JavaCard 的網頁見:http://java.sun.com/products/javacard/index.jsp ;。
          所以在這里要理解J2ME的含義,就可以從CLDC 和CDC這兩方面進行了解。
          CLDC 與CDC的對比
          在前面的圖1中已經顯示出CLDC 和CDC在適用設備上的區別。
          CDC主要針對32位的處理器主頻通常在75MHz以上,內存可能在1~4MB 。CDC 針對的設備主要是數字電視、機頂盒、網絡電話、車載計算設備等。這些設備的特點是:
          ? 有線連接
          ? 電源穩定
          ? 設備外設資源比較受限
          CLDC設備的最低配置為:CPU為16位、32位主頻在 16MHz以上的處理器,設備的內存比較少,可能只有512KB,甚至更少。現在硬件的發展非常快,以前所定義的CLDC的設備目前的設備甚至遠遠超過原來的定義。不過請注意一下,J2ME 對CLDC設備配置的定義只是一個最低要求的定義。其實目前很多CLDC設備的配置都遠遠超過上面的配置,不過要分辨CLDC設備主要要從設備特點上進行區別。這些設備的特點是:
          ? 無線連接
          ? 沒有穩定的電源供應(通常使用電池)
          ? 設備外設資源極少
          具體一點說如智能手機,例如:Nokia 7650,Nokia 3650等,還有例如PDA設備也都應該歸于CLDC的范圍。
          簡表
          J2ME 使用配置(CDC或CLDC)和簡表(Profile)定制JRE(Java Runtime Environment, Java 運行時環境)。一個完整的 JRE由配置和簡表組成,配置決定了所使用的 JVM(可能是CVM 或 KVM),而簡表通過定義特定的類來為應用程序提供功能上的支持,一個簡表定義了設備所提供的 API 集合。
          如果把CDC 、CLDC 理解稱為硬件配置的話,Profile可以理解為硬件上的操作系統,這個操作系統提供了程序可以調用的所有功能集合,也就是說Profile定義了各種功能的 API 函數集。當然這個比喻并不完全恰當,因為CVM 和 KVM 才充當了解釋Java程序執行的角色。又或者可以把Profile理解稱為虛擬機上提供的開發包,不同的開發包提供不同的核心功能調用。不管怎么理解都好,只要便于自己理解。
          這里再補充說明一點:CDC規范和CLDC規范中也都定義了基本的API集合,這些API提供Java 的基本功能,例如:java.io、java.lang、java.util 、javax.microedition.io 這些包就是定義與CDC 和CLDC中的。不過這些包都是Java最基本的功能,更多的面向設備的功能性 API 必須還是通過簡表來提供。
          下面介紹一下幾種常見的簡表:
          ? MIDP (Mobile Information Devices Profile,移動信息設備簡表):定義了移動信息設備的類型和提供相關的API集合, MIDP 所定義的功能更加面向用戶,而且比 CLDC 更高級。
          ? IMP (Mobile Information Device Profile,信息模塊簡表):定義了提供網絡連接,但是顯示方式比較單一的設備簡表,例如告警器。
          ? Foundation Profile(基礎簡表):提供除了用戶界面以外 J2SE 所能夠提供的標準類庫。
          ? Personal Profile(個人簡表):針對那些資源相對有限,但是對網絡訪問要求很高,基于AWT圖形界面的設備,例如Web-TV、汽車導航系統等。
          除這里提到的三個簡表外還有其他類型的簡表,但是上面的四個簡表是Sun公司所推薦的,而且是開放的簡表。例如以前的KJava就是和MIDP 類似的簡表。
          J2ME內定義的各種規范介紹
          到目前為止,本文一共提到了幾個規范:
          ? CLDC 規范:目前分為 v1.0 JSR 30,v1.1 JSR 139
          ? CDC 規范:目前分為 v1.0 JSR 36,v1.1 JSR 218
          ? MIDP 規范:分為 v1.0 JSR 37,v2.0 JSR 118
          ? IMP 規范:JSR 195
          ? FP 規范:JSR 46
          ? PP 規范:JSR 62
          這些規范都是J2ME中的基礎規范,例如說CLDC 設備必須要支持 CLDC規范,同時要選擇支持一個簡表規范,可能是MIDP 或者其他簡表。對于CDC 設備來說也必須支持 CDC 規范,同時選擇支持一個簡表規范,可能是FP,也可能是PP。
          對于其他規范,設備可以選擇支持。接下來我引用一下Sun公司J2ME主頁對各種規范的介紹:
          適用于CLDC設備的規范:
          Connected Limited Device Configuration (CLDC); JSR 30, JSR 139 CLDC 規范,前面已經介紹過

          Mobile Information Device Profile (MIDP); JSR 37, JSR 118 MIDP 規范,前面已經介紹過

          Information Module Profile (IMP), JSR 195 IMP 規范,前面已經介紹過

          Java Technology for the Wireless Industry (JTWI), JSR 185 無線Java行業規范

          Wireless Messaging API (WMA); JSR 120, JSR 205 無線信息規范,提供短信和彩信功能

          Mobile Media API (MMAPI); JSR 135 移動媒體規范,提供音頻視頻播放

          Location API for J2ME (JSR-179) 定位規范,提供定位功能

          SIP API for J2ME (JSR-180) 提供對會話發起協議的支持

          Security and Trust Services API for J2ME (JSR-177) 提供網絡安全與信任的支持

          Mobile 3D Graphics (JSR-184) 提供對3D繪圖的支持

          J2ME Web Services APIs (WSA), JSR 172 提供對Web Services的支持

          Bluetooth API (JSR-82, Motorola, Java Partner Site) 提供對蘭牙的支持

          PDA Optional Packages for the J2ME Platform (JSR 75) 提供對PDA中文件、通信錄等存取的支持

          適用于CDC設備的規范:
          Connected Device Configuration (CDC); JSR 36, JSR 218 CDC規范,前面已經介紹過

          Foundation Profile (FP) (JSR-46) FP 規范,前面已經介紹過

          Personal Profile (PP) (JSR-62) PP 規范,前面已經介紹過

          Personal Basis Profile (PBP) (JSR-129) 類似于PP的規范,但在圖形界面方面無需支持AWT

          J2ME RMI Optional Package, (RMI OP); JSR 66 提供對遠程調用的支持

          JDBC Optional Package for CDC/Foundation Profile API (JSR-169) 提供對JDBC的支持

          同時請大家注意一下,這里提到的適用于并不是表示只適用于,很多規范是可以同時適用于CDC 和CLDC 設備的。
          J2ME的副作用:升級你的系統
          這真是一個痛苦的事情!J2ME 中各種規范正處于一個不斷擴充和不斷完善的過程,舊設備無法支持新規范的事情會越來越多,而嵌入式設備的種類多很難在短時間內實現對各種規范的支持。
          相關網頁
          Java Community Process:http://jcp.org/ ;
          Sun公司 J2ME 主頁:http://java.sun.com/j2me/
          Sun公司 J2ME 下載頁:http://java.sun.com/j2me/downloads/index.html ;
          支持J2ME的設備列表:http://developers.sun.com/techtopics/mobility/device/
          對一些問題的看法
          J2ME 很簡單
          完全錯誤,J2ME的范圍和規模非常之大,適用范圍也非常廣。要知道嵌入式設備無論從種類還是結構來將都要遠遠超出PC機,小型機的范圍。
          認為J2ME簡單的人,多半是把J2ME過于具體化。例如:認為手機程序的開發就是J2ME開發的全部。或者認為在PDA上開發一個Java程序就是J2ME開發的全部。
          KJava程序開發就是手機程序開發
          KJava 也是一個Profile,和前面提到的MIDP的功能和作用類似。以前KJava是Sun公司提供的一個示范性簡表。但是由于事實原因現在很多智能手機都支持KJava簡表,和MIDP相比 MIDP是一個更開放的規范。
          J2ME只能用于手機程序開發
          目前看來J2ME還沒有能夠全面的滲透到各種嵌入設備中,而且目前最大的用途就是一些手機游戲。但是J2ME的用途絕對不止這些,J2ME 應用的發展有賴于各種硬件廠商提供的支持。
          J2ME已經可以作為嵌入設備上操作系統
          Java程序是解釋執行的,所以必須還要有操作系統的支持。Palm OS、WinCE、Symbian的 EPOC、嵌入Linux這些才是操作系統,而且在嵌入式智能設備上應用比較廣泛。至于JavaPhone之類的純Java產品還有待Sun公司的開發。1997年,Sun公司兼并了長期從事嵌入式實時操作系統開發的Chorus公司,希望為Java嵌入技術的發展提供了良好的操作系統環境。以后應該會出現只支持Java的硬件設備和操作系統。不過從前面提到的四種嵌入式操作系統來說,支持C/C++語言才是首位。
          J2ME程序可以實現一次編寫到處運行
          基本上很難。因為J2ME中定義的規范很多,每個規范有自己的API 集,不同的廠商還有自己提供的針對自身設備的 API集,而要求所有的嵌入設備都支持完全相同的規范集合是不現實的。所以利用廠家提供的 API 集開發程序還會保持一段相當長的時間。
          但是有些基本的規范是被強制要求的,例如CLDC 和MIDP 要求的API 集就要求所有的智能手機支持。不過另一個方面講即使是相同的規范也會有不同的版本,不同的版本中對 API 集的要求是不同的。
          在我看來 J2ME的最大好處是把Java 帶入了
          posted @ 2009-10-19 12:36 米老鼠 閱讀(152) | 評論 (0)編輯 收藏

          Sun憑借最新的Java技術試圖將其進一步實現為開發者的目標平臺,然而Java平臺自身卻分成了三種平臺:Standard版、Enterprise版和Micro版。Micro版,也就是所謂的J2ME,從問世伊始就專門設計為供內存量小和處理能力較低的移動設備作為Java開發平臺使用。

          從表面上看,這樣做對那些希望提升應用程序的移動計算能力的開發者來說是一件好事。然而,“移動設備”這個術語卻涵蓋了相當廣泛的領域,包括傳統的個人數字助理(PDA)、所謂的智能電話、傳呼機乃至GPS單元等,它們都具有各不相同的硬件配置。同樣的,這類設備的市場也支離破碎,同一供應商的兩種設備之間都還存在兼容性問題,更別說不同供應商的設備產品了,在很多情況下簡直就是亂七八糟。
          給這些五花八門的移動設備提供一種普遍適用的開發平臺看來多半是不可能的了。所以J2ME定義了兩種類型的規范,它們攜手提供一種移動Java平臺,這兩種規范就是configurations 和profiles。Configuration和profile規范提出了相當多的技術術語,下面我們就來討論一些。


          Configuration
          J2ME通過對Configuration的抽象來處理大量千差萬別的移動設備硬件功能。J2ME configuration定義了特定設備可用的虛擬機和低級API,同時提供相應的開發基礎。目前可用的Configuration有兩種,它們是連接設備配置CDC(Connected Device Configuration)和連接有限設備配置CLDC(Connected Limited Device Configuration)。


          連接設備配置

          CDC應用于相對內存量較大、更強處理器的移動設備。CDC規范采用了內存優化的虛擬機,也就是所謂的CVM,通過它提供等同標準JVM的特性。按照Sun的文檔說明, CDC針對新型PDA、智能通訊設備和機頂盒之類的高端設備。為了能夠受到CDC支持,移動設備必須至少具備以下條件:

          用于CVM和Java API庫的2 MB內存。
          32位微處理器或者控制器。
          可用網絡連接,最好是高帶寬連接。
          連結有限設備配置
          CDC的要求有利于昂貴的移動電話、IR掃描儀或類似產品。CLDC則主要針對那些更輕便、更便宜、不能滿足CDC要求的設備。

          CLDC采用了更輕型的虛擬機,設計為在較低內存環境下運行。這種JVM的參考實現也就是所謂的KVM,為什么要叫KVM呢?這是因為這種虛擬機的大小是以千字節度量的。CLDC 的設備需求如下:

          最低160KB的內存,其中128KB用于KVM和運行時庫
          最低16位25-MHz處理器
          有限的用戶界面功能
          沒有(或者間歇的)低帶寬網絡連接
          由于受到嚴格的內存容量限制,KVM因此缺乏一些完整JVM所提供的特性,這就是說,你可能得改變自己的編程風格了。KVM在如此低內存要求下不得不在浮點數學計算、反應和對finalizers類的支持等方面對性能折中。使用CLDC的開發者在編譯程序之后必須預先采用J2ME開發工具包所提供的一種檢查工具對他們的源代碼進行校驗。

          profile
          如果說配置為應用程序提供了基礎,那么profile則提供了應用程序的框架。profile定義了一整套J2ME應用程序可用的API類而且專門針對給定配置創建。Sun推出了2種可用的參考J2ME profile:基礎(Foundation)和移動信息設備profileMIDP(Mobile information Device Profile)。

          基礎profile主要用于CDC配置,因而其虛擬機幾乎等同于標準的虛擬機。這意味著,使用基礎profile的開發人員必須訪問完整實現的J2SE特性集。

          MIDP連同功能較低的CLDC配置一道為開發今天的移動設備應用程序提供了你最可能用到的Java平臺。MIDP支持J2SE類庫的有限子集而且為在CLDC配置上使用定義了定制的用戶接口和輸入/輸出類。

          編寫一次到處可行?
          兼容性如何呢?J2SE應用程序能在J2ME平臺上運行嗎?這些問題的答案主要取決于配置和profile的具體應用了。J2SE代碼無須或者很少修改即可采用CDC和基礎profile運行。然而,正如我們在這里所討論的那樣,由于主機硬件受到限制,CLDC和MIDP profile只提供了很有限的功能集合。因此它J2SE應用程序不大可能在不加修改的情況下就運行在這類平臺上,除非它把自己限制在兩種平臺的API交集之內(嚴重地限制了其功能)。因為CIDC的要求對應了今天大多數手持設備的功能,所以任何J2SE應用軟件想不經修改就運行在給定的設備上是值得懷疑的。你多半得修改需要移植到J2ME的應用軟件。但也別緊張。從保住飯碗的角度看這未嘗不是好事。

          posted @ 2009-10-19 11:59 米老鼠 閱讀(115) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 嘉兴市| 红原县| 永昌县| 永新县| 淮南市| 察哈| 措美县| 巨野县| 额尔古纳市| 筠连县| 蒙阴县| 贡嘎县| 噶尔县| 承德市| 许昌市| 涟水县| 抚松县| 滦南县| 康平县| 正镶白旗| 海盐县| 乾安县| 克拉玛依市| 浦江县| 和田市| 英超| 长治市| 金秀| 南乐县| 棋牌| 石城县| 凤山市| 益阳市| 五寨县| 云阳县| 武山县| 讷河市| 邹平县| 晋宁县| 卢龙县| 化隆|