J2ME概述
- 格式:doc
- 大小:121.50 KB
- 文档页数:15
J2MEJ2ME概述到目前为止,大部分人都已非常熟悉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(简表),用于特殊设备的额外的应用程序接口。
我想通过看一张来自SUN提供的文档中的图表(参见图 1 )来解释这其中的关系。
图一解释配置和简表的体系结构J2ME的体系结构被横向地分成三层,纵向分成两部分。
配置包括一个控制配置核心类的虚拟机,具体的简表位于每个配置之上。
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层次Java虚拟机是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是为使用较小的存储容量的设备设计的(参见图3 )。
CLDC用于内存在128到512K之间的消费电子设备,这一类别中典型代表的设备包含呼叫器、行动电话、PDA和POS终端;而另一方面,CDC 用于比PC机小但是具有比512K内存多的设备,这一类设备包括互联网络电视系统、机顶盒、POS系统、汽车导航以及娱乐系统。
一般来说,CDC使小型设备只要具有少量的资源,至少比台式机要少的资源就能进行Java编程,而CLDC使小型设备所拥有的资源只要比一张智能卡多一点就可以进行Java编程了。
图二解释设备覆盖的范围J2ME有两个配置CLDC和CDC,CLDC是为使用较小的存储容量的设备设计的,而CDC用于比PC机小但是具有比512K内存多的设备。
除了在容量大小和能力上对虚拟机规定了必要条件,配置还规定了类应用程序接口要包含常见的java.io、、java.util和ng包,配置可能还要包括其他需要的程序包。
CLDCCLDC起源可以追溯到1999年JavaOne大会上介绍的Sun的第一个袖珍版Java和第一个KVM以及相关的类库,虽然CLDC和所有的配置都满足成为虚拟机的条件,可它本身还不是虚拟机,CLDC的引用实现只是包含在当前的分布中的KVM。
根据规范中所说,运行CLDC的设备应该有512K或更少的内存空间、一个有限的电源供给(通常是使用电池)、有限的或断断续续的网络连接性( 9600 bps或更少)以及多样化的用户界面甚至没有用户界面。
通常说来,这个配置是为个人化的、移动的、有限连接信息设备而设计,比如呼叫器、移动电话和PDA 等。
与J2SE相比,CLDC缺少下列所说的这些特征:AWT(抽象窗口开发包),Swing或其他图形库用户定义类装载器类实例的最终化弱的引用RMIReflection(映射)CLDC有四个包:ng、java.util、java.io和javax.microedition。
除了microedition包以外,其他的这几个包都是J2SE包的核心子集,CLDC采用这些J2SE类库,但是把其中一些在微型设备中用不到类、属性、方法去掉了。
因此CLDC类库有许多细微的差别。
如果您想研究J2SE和CLDC类库之间的差别,请参阅相关文档,在此就不详细说明了。
想要理解为什么CLDC去除这么多J2SE中重要的类和特征,请回想一下与CLDC相关的两条基本原理。
首先,它只有512K的内存空间,而像RMI和映射需要的内存太大了。
其次,配置必须满足为一组通用设备提供最小的Java平台。
在个人移动信息设备领域中,许多系统都不能支持J2SE中的众多的高级特征。
例如,许多消费电子产品不能支持浮点数;因此Float(浮点类)和Double(双精度类)就被删除了。
再看另外一个例子,许多系统没有或不提供访问一个文件系统的功能或权限。
因此与文件有关的类也被丢弃了。
又如,错误处理是一个代价非常高的过程处理,在许多消费电子设备中,故障恢复是很难的甚至是不可能的。
所以在CLDC中,许多错误处理类也被删除了。