J2ME--丰富多彩的领域中生机勃勃的技术

来源:百度文库 编辑:神马文学网 时间:2024/04/30 04:07:22
内容:
J2ME的由来
J2ME系统结构??Configuration和Profiles
J2ME重要标准简介
J2ME的平台无关性和标准的兼容性
其他非J2ME标准的相干技巧
无线Java技巧
移动信息设备的重要把持系统平台及其对J2ME的支撑
移动信息设备上J2ME开发的现状和远景
参考材料
关于作者
Also in the Java zone:
教学
工具与产品
代码与组件
所有文章
实用技巧
董向辉
中科院主动化所人工智能实验室博士生
明天的盘算将进进普及盘算时代。各种消费电子产品,包含智能手机,PDA,Web-TV,将来的信息家电等等将实现随时随地的盘算。这是一个异常广阔和丰富多彩的领域,其设备极度多样化而且都将在网络中,Java技巧的跨平台性和网络功效在这里大有用武之地。这就是J2ME,这一丰富多彩的领域中活力勃勃的技巧。但是,这一领域的多样性和J2ME标准的复杂性很轻易让初次接触者困惑。假如他试图写一个能在自己的PDA上运行的程序,很有可能会碰到很多艰苦,由于已有的旧的技巧很有可能会被放弃,真正合适PDA的标准尚未完成,多种多样的标准和技巧本身也在迅速发展变更。
为此,本文的重点不在于具体的编码细节,而在于从概念上更正确地表述J2ME的系统结构,赞助读者懂得和把握这些复杂的标准。并且从宏观上描写平台和标准的发展,分析在移动信息设备上开发J2ME利用的现状和远景,尽量让读者能够从全局上把握复杂的局面,为将来的发展做好准备。
在今天盘算已经无处不在。越来越多的人开端认为,经过了很多人共用一台盘算机的大型主机时代,一人一台盘算机的个人PC时代之后,下一个时代就是一人多台盘算设备的普及盘算时代(Ubiquitous Computing,IBM称之为Pervasive Computing)。盘算设备将从单一的PC扩大到各种各样的大小和功效,从家庭消费电子产品,到个人随身携带,穿着,车载的各种移动信息处理设备,多样化是这个领域的最大特点。
网络是这个领域最重要的增值特征。当手机可以随时随地无线上网,PDA可以和个人PC同步,车载PC可以获得网上GPS舆图数据时,这些孤立的设备才干够施展最大的作用。
而平台无关性和网络功效正是Java的设计目标和能力(事实上,Java最初的设计目标就是用于消费电子领域,但是后来在PC和服务器上得到了发展)。"一次编写,到处运行"的平台无关性,对网络,多重设备间联网的机制(JINI)显然对这个领域是至关重要的软件条件。这个领域内的Java标准就是J2ME。
J2ME的由来
Java的最大目标和特点,就是"一次编写,到处运行"的平台无关性。但是,很自然的,正如Sun熟悉到的,"One size does´nt fit all",一套标准无法适应各种不同的需求。因此,Java技巧目前共有三套,分辨针对不同的平台和利用。
Standard Edition (J2SE,标准版):针对桌面端PC和工作站的个人和低端商务利用。
Enterprise Edition (J2EE,企业版):针对服务器端企业级利用,支撑Servlets, JSP和XML等等。
Micro Edition (J2ME,袖珍版,也有翻译为小型版或者移动版的。)针对有限内存,显示和处理能力的设备,重要是消费电子和嵌进式设备领域(这实际正是Java语言设计最初的目标领域)。
注:Java SDK 1.2及以后的版本都同一改名为Java 2,因此这些名字中都有2。
在消费电子和嵌进式设备领域,内存从几百K到几十M,从没有屏幕到Web-TV,CPU从低功耗的嵌进式处理器到206MHz的RISC处理器,硬件条件的差别是相当大的。这就使得J2ME的标准需要有不同的层次和种别来适应这个复杂的领域,因此相比之下J2ME就比J2SE和J2EE的标准要复杂得多。关于J2ME标准的文章已经有了不少,但是很少有文章明确简要地讲明确J2ME的系统结构划分的原因,而只有明确了划分的根据和为什么这么划分,才干够更好地懂得标准。尤其是由于硬件发展速度是很快的,很有可能一段时间之后,假如还按最初标准的字面定义区划分设备就会陷于迷惘。作者浏览和浏览了相当多的文章和先容,但有些标题也还是最近才熟悉得比较明确,在此和读者分享我的熟悉,也希看得到建议和指正。因此,下面的先容尽量不往重复其他文章中都已先容过的一些具体细节,不往翻译规范的字面定义,而是分析规范制定的原因,种别划分的真正标准,从开发者的角度,让读者能够在这个复杂而多变的领域中更正确地把握技巧的差别和趋势脉搏,更好地为将来广阔的机会做好准备。
J2ME系统结构??Configuration和Profiles
针对消费电子和嵌进式设备领域丰富多样的设备和彼此相差极大的盘算能力及各种硬件条件,J2ME首先根据最基础的一些特点把它们划分为两类。
具备中断网络通信能力的个人移动信息设备:如手机,双向呼机,PDA(Personal Digital Assistant,个人数字助理,也称掌上电脑)等等。
有固定的不中断网络连接的共享连接信息设备:如置顶盒(set-top boxes),Web-TV,支撑Internet的有屏幕电话,汽车娱乐/导航系统等等。
Sun的J2ME FAQ(常见标题集)里有一个很好的概括:J2ME技巧有两个设计中心??手持的设备,和可以插到墙上插座的设备。第一类设备往往是个人化的,移动的,应用电池,体积和功耗都有限制,因此功效和盘算能力有限。第二类设备一般是固定的,因此体积没有太大限制。由于固定,可以有持续电源供给,因此功耗没有太大标题,盘算能力相对充裕。
盘算能力是这两类设备的重要差别,对其上可能的利用和环境显然有着本质影响,不同种别的设备不可能采用同样的Java平台,必须分辨定义。针对这两大类设备的平台规范就是Configuration(有译为配置的,不过我认为最好不译)。第一类设备的Configuration称为CLDC(Connected, Limited Device Configuration),第二类称为CDC(Connected Device Configuration)。
属于同一类的设备盘算能力是类似的,但是其他功效和条件还有非常大的差别。作为Java平台必须保证相容性,这就必须舍弃所有的设备特别性。因此,Configuration就是支撑一组通用设备的最小Java平台,作为这些设备的最小公分母来保证不同设备间的平台相容性。这里的Java平台重要是指Java虚拟机(JVM)和核心库。
在Configuration中舍弃了设备的特别性来保证Java平台的相容性,但是仅仅有Configuration显然是不够的,特别的具体设备其独占的功效和硬件条件都没有得到支撑。为此,在Configuration的基础上,根据设备具体功效再进行一次划分,比如智能手机,PDA等等。功效的划分也就是其他硬件条件的划分,比如屏幕大小,内存,盘算能力,电力供给等等都是附属于功效的,因此同功效的设备的硬件条件都是非常类似的。Profile(译为简表或者简档)就是针对每一类功效设备的特别性定义的与设备特征相干的API,建筑于Configuration之上,作为Configuration的扩大和补充。例如MIDP(Mobile Information Device Profile,移动信息设备Profile)就定义了关于移动信息设备(重要指智能手机和一部分具有无线通信功效的PDA)的图形界面,输进和时间处理,持久性存储,短消息等等的API,并且考虑到了移动信息设备的屏幕和内存限制。而正在制定中的PDA Profile则定义了针对PDA的API,其屏幕,内存条件都要大于MIDP,但是网络方面的请求则显然和手机有所不同。如下图所示,同属于一个Configuration的设备根据功效不同由不同的Profile来支撑,Profile体现设备的特别性,但是都建筑在一个共同的基础Configuration平台之上。
关于J2ME的系统结构,我们可以这样总结:
Configuration的分类是根据盘算能力的不同来划分的,同类设备的盘算能力相近。Configuration是一个规范,定义了这类设备的共同Java平台,定义与设备无关的Java虚拟机和核心库,是平台相容性的基础。Profile的分类是根据设备功效划分的,同类功效的设备其他各种硬件条件和需求也相近。Profile是一组API,在某一Configuration的基础上扩大了针对设备特定功效的API,使得标准能够完整适应特别的设备,彻底施展设备的功效。
J2ME系统的一般结构是:由Configuration定义的Java虚拟机运行于设备的宿主把持系统之上,构成全部平台的基础。Configuration供给了基础的语言特征,Profile供给针对设备的特别功效API和扩大类库。利用程序的运行环境需要一个Configuration和至少一个Profile,多个Profile可以共存,也可以叠加。
我们用两个具体设备的实现作为例子阐明。在一个运行Palm OS的PDA上,Configuration采用CLDC,虚拟机采用KVM(虚拟机和Configuration是紧密相连的,KVM只是CLDC定义的一个参考实现(reference implementation),并不是唯一的选择),然后采用PDA Profile的Profile。在另一个运行Symbian的智能手机上,则可以采用KVM,CLDC,MIDP。
注:在JCP(Java Community Process,J2ME标准在这里制定)的网站上已经提出了JSR 68(Java Specification Request,标准提案),将在下一代J2ME标准中用Building Block概念来代替Configuration。其原因是,Profile经常需要供给J2SE中已有的功效,为了能够利用已有的J2SE API而不是重新制定新API,引进了Building Block概念。一个Building Block定义一个来自J2SE或者J2EE的API以用于J2ME。这样,Profile就可以通过Building Block来利用已有的API。
J2ME重要标准简介
J2ME的标准很多,其中很多细节凡是关于J2ME的文章都会先容,这里我们只简要先容几个基础而重要的标准。读者也可以直接往查标准的正式文档,在JCP网站可以找到所有J2ME标准和规范,包含还在提出和审核阶段,没有正式成为标准的提案。
固然J2ME标准繁多,但只要把握住标准划分的原因就很轻易把握。在这个技巧飞速发展的领域,我们不能把眼力局限于标准的字面含义,而要机动把握,把握其精力。比如,CLDC和CDC的定义中具体的最小内存需求仅仅是"最小的",随着硬件能力的飞速发展,很有可能一些界限会变得含混。PDA本来应当属于CLDC的领域,但是Compaq的iPaq上却实现了CDC。以后的下一代PDA有64M内存并不意外,在其上实现CDC也是完整可能的。但是,从功效的角度,应当还是CLDC以及PDA Profile更合适于PDA的条件。到那时,具体的实现就要看厂商和开发者的选择了。还需要留心的是,由于Profile是建于Configuration之上,作为对Configuration的扩大,因此Profile必须Configuration的支撑。有的文章在讲到MIDP的内存需求时,说MIDP需要最少256K,这是指MIDP本身。而有的文章说MIDP需要最少768K,那时由于把作为基础的CLDC所需要的512K算进往了。
CLDC
CLDC(Connected, Limited Device Configuration)针对个人化的移动的有限连接信息设备,例如智能手机,双向呼机,PDA等等。其请求是:
512 KB 以下内存
有限能源供给(通常应用电池)
有限或非持续网络连接
简略的用户界面(甚至没有)
在如此严格的限制之下,CLDC 只包含四个包,其中三个来自标准 Java 规范并且作了缩减(java.lang、java.util 和 java.io),另一个专门针对 CLDC (javax.microedition)。
包 描写 类和接口数目
java.io 系统输进输出 18
java.lang Java 编程语言的基础类 38
java.util 集合、日期和时间支撑、各式实用工具类 10
javax.microedition 通用连接框架(Generic Connection Framework) 10
表 1. CLDC 中的包
CLDC必须照顾最苛刻的硬件条件,因此往掉了很多重要的类和特点,只保存了最核心的一些基础类。例如RMI和映射因需要内存太多而被舍弃,毛病处理请求的代价太高,也被删除了。很多设备不能支撑浮点数,更不用说双精度类了。还有很多设备没有或不供给访问一个文件系统的功效或权限。不过请放心,对于那些能够支撑更多特点的设备,它们所需要的这些功效或者超出标准J2SE请求的功效,都可以由针对此类设备的Profile来补充。
CLDC中唯一新增的javax.microedition包定义了一个通用连接框架(Generic Connection Framework,GCF)。通用连接框架把J2SE中的文件,sockets,HTTP恳求和其他输进/输出机制的概念抽象为更简略的一套类。可以说,它供给了java.io和java.net的同样功效,却不需要设备的特别能力。与底层把持系统无关是Configuration的基础请求。通用连接框架可以看成是结构通信驱动的框架,这一点类似于J2SE中的JDBC,后者是一个结构数据库驱动的框架。通用连接框架并没有定义对任何特定协议的支撑,但是在Sun的一个CLDC参考实现中确实包含了对一些通信协议的支撑,这点使很多人感到困惑。那些协议只是一些例子,协议的支撑应当在Profile层或者专门针对某设备的扩大中定义。
由于虚拟机处于Configuration中定义平台的核心,Configuration和虚拟机是紧密相干的。既然CLDC的硬件请求如此苛刻,对其虚拟机也就有着非常高的请求。Sun供给的参考实现是KVM(K Virtual Machine)。KVM是完整从头开端编写的,其设计目标包含:
虚拟机的大小和类库为50到80KB左右
内存占用为几十K
在具有 16 位和 32 位处理器的设备上,有相当的性能
高度可移植和可扩大,特定于机器和/或平台的代码的总量很少
多线程和垃圾回收是独立于系统的
可以对虚拟机的组件进行配置,以合适于特定设备,从而加强了机动性
KVM的实现是相当成功的。最早在1999年JavaOne大会的时候,作为Sun的Spotless打算派生成果,Sun分发了很多Palm V,供给了Palm OS上的第一个KVM版本和一个实验性的类库com.sun.kjava。这一KVM非常小而紧凑,只需要几十K内存。而com.sun.kjava类库供给了Palm的图形用户接口,Palm数据库访问,简略的集合类等等。将两者联合,开发者就可以开发Palm上的Java利用,因此它受到了开发者的广泛欢迎,网上也有了很多教程和示例代码。事实上,到目前为止,这都是在Palm上开发Java程序的唯一公平道路。CLDC没有定义用户界面等API,MIDP并不合适PDA,对应的最合适J2ME标准是PDA Profile,但是尚未完成。很多开发者强烈请求Sun在正式的J2ME标准中持续支撑它,但是Sun已经放弃了这一技巧,而且并不保证正式的PDA Profile与之的兼容性,因此我们不建议读者过多研究。
由于这一历史原因,造成了很多名词上的困扰。很多早期的文章把这一KVM与com.sun.kjava包合称为KVM,表现这一技巧,而现在所说的KVM应当是单单指Sun的CLDC虚拟机参考实现。甚至还有人用K Java作为J2ME的代称,表现基于KVM的Java,这很轻易和正式的J2ME标准以及早期的com.sun.kjava包相混杂,读者在看这类文章时需要留心文章的时间和背景,并采用严格的正式名称。
目前Sun还正在开发KVM的一个高性能版本--Project Monty虚拟机以用于下一代的移动信息处理设备。它采用了Hot Spot的技巧,性能将比现有的KVM将近高一个数目级。
固然KVM作为Sun的参考实现最经常被提到,不过并不即是必定要用KVM。其它公司的虚拟机只要满足相应的Configuration里的定义,通过兼容性测试,一样可以作为Configuration的虚拟机。目前IBM WebSphere Micro Environment,已经通过了"Java PoweredTM"认证,其J9虚拟机在相当多的平台上通过了J2ME兼容性测试:
MIDP
MIDP(Mobile Information Device Profile)定义了针对移动信息处理设备(重要指智能手机和一部分具有无线通信功效的PDA)的图形界面,输进和时间处理,持久性存储,无线电话网络连接之上的一些消息处理(例如短消息),安全等等API,并且考虑到了移动信息设备的屏幕和内存限制。类似于J2SE中的Applet框架,MIDP供给了基于javax.microedition.midlet 包的MIDlet利用程序框架。
由于MIDP提出较早,目前重要的智能手机和PDA把持系统上都已有了相应的实现(后面将简要先容这些把持系统),网上也有很多教程与文章,一般所谓的Wireless利用文章都是关于MIDP的,这里就不再重复了,读者可以参考文末的资源。
PDA Profile
PDA Profile将在CLDC的基础上,供给针对PDA的用户界面,数据存储等扩大API。用户界面部分实用于有限大小和色彩的显示,为了支撑开发者已有的经验基础,将是AWT的一个子集,也有可能在AWT子集之上加进MIDP用户界面组件。而存储机制将是简略的,平台无关的,类似于MIDP中的存储,为利用程序、数据、配置/环境信息供给简略的数据存储。
目前这一规范正由Palm Source公司(从Palm公司分别出来的专门负责Palm OS的公司)领导主持,已经在4月8日开端进进了JCP流程的第二阶段Community Draft最后部分(Community Draft Ballot 08 Apr, 2002 ),估计终极正式版本应当在7月至9月左右完成。(参考http://jcp.org/introduction/timeline/index.en.jsp)前面已经提到,PDA Profile将代替 k java,作为针对PDA的正式J2ME标准。因此建议希看在PDA上开发利用的开发者等候这个标准的出台和相应的实现,现在假如要进行MIDP的利用开发,则应明确其目标是智能手机类的设备,而不是PDA,这一点很多文章都没有讲明确。
CDC
CDC(Connected Device Configuration)针对有固定的不中断网络连接的共享连接信息设备,如置顶盒(set-top boxes),Web-TV,支撑Internet的有屏幕电话,汽车娱乐/导航系统等等。
CDC请求为Java供给至少2M的内存,这可以是ROM加上RAM,也就是说,Java虚拟机和核心类库很有可能放在ROM或者Flash里。事实上,下一代无线手持设备完整可以满足CDC的需求。
CDC是CLDC的完整超集,包含了所有的CLDC规范。另外,在相对充裕的条件下,它支撑J2SE的标准 Java 虚拟机和一部分核心类库。对于这一点,几乎所有的文章都这么说,却很少有文章彻底分清彼此之间的兼容性关系,甚至还有文章毛病地说CDC支撑Java语言的完整实现,这是很轻易引起混杂的。
首先可以确定,既然CDC是CLDC的超集,基于CLDC的程序在CDC内是完整兼容的。不过这里的CLDC程序必须只用到CLDC的部分,一旦采用了某一个Profile,显然也就不能在CDC内兼容了。
其次,CDC支撑标准的J2SE虚拟机,这只是Java平台的基础,并不包含建筑于平台基础之上的各种类库。特定设备需要的特定类库由相应的Profile来定义。这一点随后就会提到。还是那个要害:Configuration定义的是一类设备的与设备无关的最小平台,因此,诸如用户界面之类的类都被分别,留在Profile中定义。
固然CDC支撑标准的J2SE虚拟机,但是标准的Java虚拟机显然无法适应有限的资源环境。为此需要专门定义一个虚拟机,称为CVM(开端的时候,CVM代表Compact Virtual Machine,但是后来Sun的工程师认为这有可能与KVM相混杂,因此现在C并不代表特定的含义)。CVM除了支撑标准J2SE虚拟机的所有特征外,还支撑很多嵌进系统需要的特征,更合适于在资源限制条件下运行,移植性很强。目前Sun供给了Linux和VxWorks之上的CVM参考实现(reference implementation)。
Foundation Profile
Foundation Profile供给除了用户界面以外CDC所缺乏的几乎所有标准J2SE核心类库,作为其他所有Profiles的基础(我们看到,多个Profile可以共存,也可以叠加)。
Personal Profile
Personal Profile针对那些资源相对有限,但是需要高度的Internet和WEB连接支撑的设备,例如Web-TV,汽车导航系统等等。它在Foundation Profile的基础上供给了网络特征以及支撑Java applets的 GUI。
Personal Profile的前身是Personal Java,Personal Java是Sun为资源限制设备创立 Java 平台版本的早期尝试。Personal Profile将与Personal Java 1.1和1.2向后兼容。
RMI Profile
RMI Profile在Foundation Profile的基础上供给RMI支撑,将答应网络设备与其它系统利用程序(不必定是J2ME的)交互把持。
J2ME的平台无关性和标准的兼容性
平台无关性重要指的是设备的宿主把持系统平台。由于Java平台建筑于虚拟机之上,只要不同的把持系统上的虚拟机满足同样的规范和标准,对于虚拟机以上的层次是平台无关的。这使得针对某一Configuration或者Profile的利用可以运行于所有实现了这一Configuration或者Profile的把持系统平台。举例来说,目前已经有网站开端收集基于MIDP的程序??MIDlet,供给下载和收费,各种支撑MIDP的设备都可以应用,这包含数目宏大的智能手机和几乎所有的PDA(Palm OS和Pocket PC)。
对于Profile而言,不同的Profile之间一般是不相容的,比如日本NTT 的DoCoMo已经销售了相当多的支撑CLDC的手机,但是应用的是自己专用的Profile,针对这一Profile的程序对其他Profile也就是不兼容的。事实上,由于Profile是针对设备功效的,不同的Profile针对的设备,往往功效上有着较大差别,程序的相容性既不可能也无太大意义。当然有一些设备的功效划分不那么明确,比如有无线通信功效的PDA和智能手机。由于一个Configuration之上可以同时有多个Profile,Profile之间也可以嵌套和叠加,例如CDC的Foundation Profile就是其他各种Profile的基础。那么这些设备就既可以采用MIDP也可以采用PDAP,在以后的硬件基础上,同时装多个Profile也完整没有标题。
有的文章里说,J2ME为了能够在盘算能力有限的设备上运行,舍弃了J2SE的很多特征,因此J2ME是J2SE的子集。这样的说法没有夸张J2ME里由于设备特别性而增长的内容,因而是不正确的。除非程序只用到这些平台间共同的部分,否则是不能相容的。而一般来说,共同的部分是相当有限的。
其他非J2ME标准的相干技巧
还有一些技巧和J2ME相干,但是并不属于J2ME,我们在这里作简要先容。
Java Card
Java卡(Java Card)是为智能卡(smart cards)设计的。Smart cards的内存非常有限,为此限制了类的数目(例如,没有Windows系统类),并把全部Java Card规范在一个二进制核心里实现,然后用Java封装。由于智能卡的功效很简略而轻易把握,类不需要频繁转变,这一方法效果很好(对于J2ME显然不能应用这种方法)。另外,由于每一个Java卡利用的数据和代码是独立在沙箱(sand box)内履行的,一张卡上可以有多个利用,彼此独立,并且很安全,这样就实现了一卡多用,不需要在钱包里装太多的卡。
固然Java卡是为智能卡设计的,不过也可以用于很多其他处所。例如1998年的Java One大会上的Java戒指(Java Ring,又名 Java-Powered iButton,事实上只是Java Card的另外一种型态,Dallas Semiconductor公司将它制作成为钮扣的外形,进而镶嵌在戒指之上),或者世界上现在发布的数百万张GSM SIM卡。
Embedded Java
Embedded Java是历史上Sun另一次创立嵌进系统Java平台的尝试,针对有中断的网络连接或者没有网络连接的设备,这些设备经常是没有图形界面的。Embedded Java的设计更接近于J2SE,但是因此太大太慢,而且对系统请求过高。另外,Embedded Java将把持其运行的平台,也就是吸收所有的系统调用,所有的库,所有的设备。显然供给平台的公司不会爱好这一点。因此,Embedded Java基础上完整失败了。
WAP
WAP(Wireless Application Protocol,无线利用协议)是XML的一个利用,其目标是在无线设备如手机上显示Internet内容。由于无线设备的显示区域有限,需要将标准的HTML重新调剂以适应硬件条件。
很多初听说J2ME的人都会想到WAP,实在WAP和J2ME并不冲突,而且是很好的互补。WAP对于文本为主的内容是很合适的,需要持续的网络连接。但是对于图形较多的利用WAP就不太合适,只能供给轻量级的脚本履行能力。WAP的网关也有安全性标题。而Java技巧可以用于中断的网络连接,可以将利用和服务逻辑在设备和服务器间分别,很合适于图形利用,有很稳固而可靠的安全模型。
联合WAP和Java技巧的一个方法是在设备上安装一个WAP浏览器,并且实现CLDC和MIDP及其与WAP浏览器之间的通信。也有一些WAP技巧是用Java实现的,比如K Browser(http://www.4thpass.com)就是一个用Java实现的浏览器,运行于J2ME之上。
无线Java技巧
无线这个概念在J2ME的相干文章中经常涌现,但是
无线Java不即是J2ME。J2ME中,无线设备只是其中的一小部分。而无线Java技巧也可能包含这种情况:在笔记本上运行J2SE利用,通过802.11 LAN连接网络。
MIDP不是全部的J2ME。MIDP发布最早,因此也得到了最广泛的支撑,相干的讨论和文章因此也非常多,但是J2ME当然不仅仅是MIDP。
MIDP不是全部的无线Java技巧。还有很多其他Java技巧属于无线技巧,比如Personal Java,PDA Profile,甚至无线设备上的J2SE。
移动信息设备的重要把持系统平台及其对J2ME的支撑
在消费电子和嵌进式设备的广阔领域中,目前最受关注的是移动信息设备,因此有必要先容一下移动信息设备的重要把持系统平台,这对J2ME的开发是相当重要的。移动信息设备重要包含PDA和智能手机,现在和将来都还会有一部分设备处于PDA和智能手机交界的地位。其中手机的市场远比PDA要大得多,所以很多国外谈到J2ME的文章都是以Wireless利用为主。
PDA也即掌上电脑,一般是指类似于Palm公司出品的Palm这样的设备,重要的把持系统有Palm OS和Pocket C两大阵营。Palm OS来自Palm公司,是一个开放的系统,在PDA市场上占主导地位,已经有非常多的第三方厂商开发的利用和一大批非常忠诚和狂热的用户。目前采用Palm OS的重要有Palm公司的Palm系列和Sony公司的Clie系列(Handspring公司的Visor也属于这类产品,但是已经颁布退出传统PDA市场,重要发展PDA和无线通信联合的产品Treo)。
Pocket PC是微软及其合作伙伴Casio、Compaq、Hewlett Packard和Symbol推出的,基于Win CE 3.0,也是一个开放的标准系统,功效可以扩大(以往的Win CE是一个封闭的不可扩大的系统),在这个平台上厂商可以自己开发软件。具体产品如Compaq的iPAQ。
另外,Sharp公司Zaurus系列PDA采用Linux的一个针对嵌进式系统的版本。作为拥有高达64M内存的高端PDA,可以满足CDC的标准,预装了Personal Java的虚拟机。
在智能手机领域,重要的平台是Symbian的EPOC。EPOC最早由Psion开发,重要面向智能手机,也有PDA的特点,Psion就是第一批重要的PDA厂商之一。Psion颁布EPOC的第一个版本是开放的OS,并向其它厂商授权,随后Psion与Ericsson,Nokia,及稍后的Motorola建立了名为"Symbian"的同盟,目前重要股东为Motorola, Nokia, Panasonic, Psion和SonyEricsson,而且Siemens4月也颁布加进。Symbian在欧洲有很好的基础,为大多数重要手机厂商所采用,范例的产品如Norkia的9210。
图5:Norkia 9210
Symbian向领先的软硬件开发商开放源代码--所谓的Platinum Programme。从Symbian OS 5起开端支撑java,OS 6引进了Personal Java和Java Phone(在Personal Java基础上的一个扩大API,重要针对手机),OS 7开端支撑CLDC和MIDP(部分基于6.0和6.1的产品也支撑)。
另一方面,微软则有PocketPC 2002电话版和SmartPhone 2002(又称Stinger)与Symbian竞争,显然,前者是有无线通信功效的PDA(前面提到的Handspring新推出的Treo就是这类产品的范例),后者是有智能处理功效的手机。
移动信息设备上J2ME开发的现状和远景
在前面提到的这些把持系统平台中,Palm OS上已经有了MIDP的参考实现,但是并不是最合适PDA的Profile。Symbian实现了CLDC和MIDP,作为智能手机的把持系统,是理想的MIDP利用平台。在Compaq的iPaq上已经实现了CDC(基于Pocket PC),另外前面提到过,IBM的WebSphere Micro Environment在Pocket PC上实现了CLDC,CDC和MIDP。Sharp的Zaurus实现了Personal Java(基于Linux)。可以看到,在硬件条件较好的PDA上(Pocket PC和Zaurus都应用Intel Arm CPU,比Palm应用的Motorola DragonBall系列性能要高得多)都可以实现CDC的标准。由于这些重要把持系统平台都是开放的,基础可以信任,重要的移动信息设备把持系统都将一直供给J2ME的支撑,但是具体支撑哪个标准则并不必定呆板地按照CLDC和CDC的最初定义,和设备的硬件条件和厂商的选择有关,或者可能同时实现多个标准。
关于移动信息设备上J2ME利用的具体开发,现有的文章和技巧基天职为以下几类:
采用早期的KVM和com.sun.kjava包,或者加上第三方的k awt类库。有很多早期的文章和代码,但是这一技巧将被PDA Profile代替,而且不保证兼容性,不建议开发者采用这一方法,而是等候PDA Profile的最后完成及实在现。
采用CLDC和MIDP开发。由于MIDP标准发布较早,智能手机的市场也远比PDA大得多,这是目前大批的无线利用文章的重要内容,不过它最合适的目标是智能手机,固然智能手机可能有必定的PDA的功效,但是这一技巧并不是最合适PDA的,开发者需要考虑明确。
采用CDC和Personal Profile,这样的文章不太多见,目前的移动信息设备硬件能力还有所不足。但是下一代的PDA和智能手机确定可以支撑。
就现有的PDA硬件条件而言,J2ME利用要和已有的利用竞争还有比较多的艰苦:
空间:现在一般的Palm类设备内存从2M到16M不等(目前较高级的机型都已支撑扩大卡,可以扩大到128M,但是卡上运行程序的速度要慢得多,一般重要用来放数据,运行程序不能依附于卡),Palm上一般现有程序的标准大小是几十K到300K以下。而仅MIDP的Palm参考实现库在Palm上就需要将近600K,再加上作为基础的CLDC库,加上程序,就快要接近1M了。和已有的利用相比,目前是没有太大竞争力的。
速度:由于Palm一直信仰的是"简略就是美"的原则,目前的Palm系列PDA重要用的是33MHz 的Motorola 68000系列DragonBall,这固然带来了本钱的降低和节电性,但J2ME利用的性能很难让人满足了。作者在自己的Palm m100(进门机型,但是Palm系列各机型的CPU速度基础上是一样的)测试过一些演示程序,一般都有两三秒钟的启动延迟。
功效:目前最合适Palm的PDA Profile尚未完成,假如用MIDP开发则不太合适,用早期的KVM和com.sun.kjava则由于不是J2ME标准,程序兼容性无法保证。
固然如此,但是在移动信息设备上开发J2ME利用的远景还是非常美好的:
硬件的发展:目前的Palm配8M到16M内存已经是主流,下一代超过32M是必定的趋势。Palm OS 5终于开端支撑32位的ARM RISC处理器,其速度应当能够进步10倍以上。事实上,Sharp公司今年第一季度发售的Zaurus SL-5500已经采用了Intel 206MHz StrongARM处理器和64M内存,在这样的硬件上速度和内存都不会成为标题。
标准的完善:PDA Profile今年内将最后完成,可以预计很快会在重要把持系统上得到实现。目前在JCP也有很多其他标准非常有意义,例如关于蓝牙技巧(Bluetooth),游戏,定位等等。
平台的广泛性:移动信息设备的重要把持系统平台都是开放的,J2ME的标准也是开放的,因此基础上所有的重要把持系统平台都支撑或将支撑J2ME,这带来的广阔市场(智能手机的市场尤其宏大,据称Norkia到今年就可以出货5000万只Java手机,而到2003年可达1亿只。)和真正的"一次编写,到处运行"是任何其他技巧无法相比的。对于开发者而言,可以不受把持系统的限制,不用担心在这个多变的市场上因平台的变更而影响自己的利用。
开发的方便性:J2ME固然和J2SE有着很多不同,但仍然属于Java技巧,具有Java方便开发的优点,也使得Java程序员学习移动信息设备开发没有太大艰苦(事实上,我认为开发J2ME利用的重要艰苦不在于具体编码,而在于标准的复杂性)。
相关资源:
J2ME牵涉到的内容相当多,这里具体列出各方面的重要站点。
J2ME的官方网站:
http://jcp.org,Java Community Process(JCP)。固然Sun是Java的开创人,但是现在Java平台的很多定义和扩大工作是通过JCP进行的。JCP答应公司和个人参与到Java平台的定义和修正工作中来,其流程很简略,先提交一个扩大Java平台的规范需求(java specification request, JSR),假如被吸收,就组成一个专家组正式定义这个JSR。专家组的成员包含该领域的专家和志愿奉献精力和时间者。下一步就颁布出来吸收其他JCP成员和大众,审查,根据审查意见修正后,就投票吸收为一个正式的Java标准。这一过程能够保证Java的各种实现是兼容的,从而保证Java利用的相容性。所有的J2ME标准都是通过这个流程定义的。
http://jcp.org/jsr/tech/j2me.jsp,所有的J2ME标准。
http://java.sun.com/j2me,J2ME官方网站。
http://java.sun.com/products/cldc/wp/ProjectMontyWhitePaper.pdf,Project Monty虚拟机的白皮书。
无线Java技巧:
http://wireless.java.sun.com,有大批的教程和文章,重要针对无线Java技巧。其中
http://wireless.java.sun.com/getstart/,先容无线Java技巧的含义和基础概念。
http://wireless.java.sun.com/midp和http://wireless.java.sun.com/midp/articles,关于MIDP。
http://wireless.java.sun.com/midp/quizzes/midp是一个测验你对MIDP懂得程度的测试。
http://wireless.java.sun.com/getstart/conceptmap.html,以非常直观的情势表现了各种Java平台,技巧和标准之间的关系,对把握全局很有利益。
http://www-106.ibm.com/developerworks/wireless/,IBM developerworks的无线技巧专区。
http://alphaworks.ibm.com/wireless,大批的无线新技巧。
http://www-3.ibm.com/pvc/index.shtml,IBM的普及盘算。
资源收集网站:
Bill Day的J2ME资源,http://www.billday.com/j2me,非常全面,但是初接触者看的话可能会感到重点不太突出。Bill Day是Sun在J2ME方面的资深专家,其文章很有价值。
http://www.jguru.com/faq/J2ME,他在jGuru主持的J2ME FAQ
http://forums.itworld.com,Community-> Java Forum-> Device Programming,他在ITworld主持的Device Programming论坛。
http://www.shiunkle.idv.tw/j2me/articles/index.htm,我国台湾在PDA的应用和J2ME的熟悉上都要比大陆超前一些,这里列出了台湾方面几乎所有重要的中文材料,对于我们很有赞助。其中王森的文章,以及台湾IBM DeveloperWorks网站的MIDP专题都相当不错。另外有几位重要书籍的作者经常在BBS linux.twbbs.org(telnet linux.twbbs.org)的J2ME版讨论和答复标题,是国内J2ME方面讨论比较深进的处所。
http://www.midletcentral.com/,供给MIDP利用下载。
http://midlet.org/jsp/index.jsp,供给MIDP利用下载。
http://www.pdaordie.com/java_for_wince.asp,在Pocket PC上的Java开发。
一些重要的J2ME文章:
developerWorks 中国网站的另外两篇关于J2ME的文章
http://www-900.ibm.com/developerWorks/cn/java/wi-j2me/index.shtml,仔细研究 J2ME。
http://www-900.ibm.com/developerWorks/java/j-j2me/index.shtml,J2ME 走向成熟。
http://www.yesky.com/20011004/199789.shtml,Java嵌进式开发系列一到六,比较全面。
邮件列表:
http://archives.java.sun.com/archives/kvm-interest.html,固然名字是KVM,但是实际上讨论关于J2ME的一切话题。有很多Sun的工程师和其他专家,J2ME的实际开发者积极参与讨论。
相关书籍:
前面提到的Bill Day的J2ME资源中列出了重要的J2ME相干英文书籍。
前面提到的http://www.shiunkle.idv.tw/j2me/articles/index.htm中列出了台湾出版的重要J2ME方面著作。
电力出版社引进了其中两本:
Palm 利用程序设计--应用 Java 语言,朱仲杰著;中国电力出版社,2001.
深进Palm利用程序设计:应用Java语言,朱仲杰著;中国电力出版社,2001.
关于作者
董向辉,中科院主动化所人工智能实验室博士生。研究方向为演变盘算和复杂性科学。