王朝网络
分享
 
 
 

J2me的基本概念

王朝java/jsp·作者佚名  2008-05-31
宽屏版  字体: |||超大  

本文主要介绍J2me的基本概念。因为注意到国内的Java站点介绍J2me的还比较少,所以就写了本文。如果有什么不妥的地方,欢迎您email我,讨论商榷。

如您要转贴,请保留原出处,并勿做删改。谢谢。

1.名词

这里我列出一些常见的关键词,方便与下文参照.具体解释见后文.

J2ME(Java2 Platform, Micro Edition)

CLDC(Connected, Limited Device Configuration)

MIDP(Mobile Information Device Profile)

KVM(The K Virtual Machine)

2.背景

随着无线应用与嵌入式系统的愈来愈受到人们的重视,SUN也推出了J2ME来迎合这一趋势.(实际上道也不能算是新推出,熟悉Java历史的人都知道,java原先本是为了开发消费性电子产品而研制的.谁知,无心插柳柳成荫,因在网络应用上的出色表现而流行,以致现在的J2EE、EJB等等,发展地越来越庞大。这次实质是杀了个回马枪。至于表现如何,还得拭目以待)sun认为,未来的信息设备将比我们今天的更为customizable 和 personal。这一点我们已经可以从手机和pda的流行程度看出。所以为了开发面向这些设备的applications。sun推出了J2ME(Java2 Platform, Micro Edition)。

3.j2me的基本结构

j2me把设备分为两类,一种是联接设备( connected device),一种是有限联接设备(Connected, Limited Device)。前一种对应于那些有电源的,电力充裕,较大的设备。例如:电视机,冰箱等,后一种对应于主要使用电池,小型的设备,例如:手机,pda等。这里我只涉及第二种,有限联接设备(Connected, Limited Device)。

3.j2me的基本结构

sun把J2me分为两个部分:configuration 和 profile。

configuration包括虚拟机(virtual machine),核心的类库与API。configuration层定义一个java虚拟机的特性与java类库的最小子集。也就是说,configuration层提供了开发人员一个最基础,最核心的Java平台。就像我前文提到的,j2me把设备分为两类,一种是联接 设备(connected device),一种是有限联接设备(Connected, Limited Device)。对应这两种设备就有了两种J2ME configuration。分别为CDC(Connected Device Con-figuration )和CLDC(Connected, Limited Device Configuration)。这里请注意,CDC使用经典的javaVM,而CLDC使用的是KVM(The K Virtual Machine)。

注:kvm是sun为使用16/32位RISC/CISC微处理器或控制器,并其可用内存为160kb~512kb 的的设备而开发的。

Profile层也包含一组API,主要针对于特定的某一族系的设备而定义。profile层在特定的configuration层上实现,而我们程序员则负责在特定的profile上编写应用程序。对于手机,pda等Connected, Limited Device。它们的profile层称为MIDP(Mobile InformationDevice Profile)。于是MIDP与CLDC合在一起就构成了一个完整的J2ME架构。

顺便说一句,对于MIDP上的应用程序sun也有独特的叫法,它们被称为MIDlet。你是不是觉得有点眼熟。想想java中的applet。

┌───────┐┄┄┄┄┄┄┄

│MIDlet │ 应用程序

├───────┤┈┈┈┈┈┈┈

│ MIDP │ proflie层

├───────┤┄┄┄┄┄┄┄

│J2ME核心API │ configuration层

├───────┤ CLDC

│ KVM │

├───────┤┈┄┄┄┄┄┄

│特定的硬件 │

└───────┘

图1 J2ME的CLDC&MIDP架构

4。深入理解CLDC

本节的部分内容译自J2ME White Paper,比较枯燥,但请记住,毕竟,正确的观念重于一切。

CLDC的目的

?为小型的,且资源有限,Connected Limited的设备定义一个标准的Java平台。

?允许动态的向这些设备发布内容与应用程序。

?方便第三方软件厂商与开发者向这些设备移植内容与应用程序。

CLDC的范围

?Java语言与虚拟机的特性

?核心Java类库(如java.lang.*, java.util.*)

?输入/输出

?对网络的支持

?对安全性的支持

?对国际化的支持

CLDC不包括的范围(即由MIDP解决的)

?对应用程序life-cycle的管理(就是指一个应用程序是如何安装,运行,删除的)

?UI界面(User Interface)

?Event处理

?高级应用程序模式(这里指用户与应用程序的交互)。

CLDC的安全性

低端的基于虚拟机的安全性由下载时对class文件的审核(verification)步骤来保证。(如果你写过并编译过MIDlet程序,就会知道这一步是必须的。这里有一个概念就行了,我会在以后讲述如何创建MIDlet程序时,详细介绍具体的步骤)。

基于应用程序的安全性通过使每个应用程序分别运行在相对独立的封闭环境中来保证并且处于被保护的系统package中的类不能被应用程序重载(overridded)。

对于Java语言支持的特殊的方面

CLDC总的来说是与Java语言完全兼容的,但需注意以下几点:

不支持浮点数据类型(即没有float和double)(这实际上主要是由于CLDC所面向的设备,其硬件因其内存限制或是基于安全性的考虑不支持浮点运算)

不支持类实例(class instance)的终结(finalization),即不存Object.finalize ()方法。(注:finalization指的是java中提供的有别与garbage collection的另外的一种对象清理方法。具体可参看侯捷老师译的BrUCe Eckel的《Thinking in Java 第二版》,可以在www.jjhou.com中下载)

有限的错误处理,即大部分Java.lang.Error的子类都未被支持。与此相反,CLDC包括了相当完备的异常(exception)类。

对于Java虚拟机(Java Virtual Machine)支持的特殊的方面

实质上CLDC在其严格的内存限制下达到了对Java虚拟机相当程度的兼容性。不过还是有下列不同点。

?不支持浮点数据类型(没有float和double)

?不支持JNI (the Java Native Interface )

?不支持用户自定义的Java级的类载入器(class loaders )

?没有反射(reflection)特性(注:reflection指java通过java.lang.reflect提供的,可以对类的能力进行分析的功能。常用来对类的结构进行检查,在JavaBeans上有广泛运用可参见Gary Cornell的Core Java2 volumeI,II,机工有出中译本)

?不支持线程组(thread groups)或守护线程(daemon threads)

?不支持类实例(class instance)的终结(finalization)

?没有弱参考(weak references)(注:weak reference提供了一种解决指向已经被garbage collector清除的对象的方法。在Java2中被介绍。具体请参考java.lang.ref API文档,和sun网站上关于Reference Objects和Garbage Collection的文章。)

?有限的错误处理(error handling)

4。深入理解CLDC (part II)

本节的部分内容译自J2ME White Paper,比较枯燥,但请记住,毕竟,正确的观念重于一切。

类文件审核过程(classfiles Verification)

CLDC要求其下层的虚拟机能够辨别并拒绝非法的class文件。但由于CLDC本身面向小内存消耗的小型设备这一前提。其类文件检测机制与J2SE中定义的标准类文件审核机制还有所不同。请注意看下图:

MyApp.java

┌───┐

│Javac │┄编译器

└───┘

MyApp.class

┌──────┐

│preverifier │┈预审核器

└──────┘

MyApp.class

↓download...

┌────────┒

│ ┠┄┄KVM运行环境

│┌──────┐┃ (目标设备)

││ verifier │┃

│└──────┘┃

│ ┃

│┌──────┐┃

││ │┃

││interpreter │┃

││ │┃

│└──────┘┃

┕━━━━━━━━┛

图2 CLDC/KVM中类文件的审核过程

请注意CLDC中的预审核(preverification)过程。这是CLDC区别于通常的类文件审核过程的关键。如上图所示,当源程序被编译后,必须被预审核器预审核,然后才能被下载到目标设备上去。之所以有这一步骤,主要是为了减轻KVM中审核器的负担,加快审核速度。就像我前文提到的,这是出于对CLDC支持的硬件的考虑(毕竟手机和PDA并没有我们PC机那样奔腾的“芯”呀!^-^)。这里记住这个概念就行了。具体的操作方法我会在以后讲述编写MIDlet程序时介绍。

类文件格式

sun要求通过Jar(compressed Java Archive)给Java应用程序打包,这里也不例外。所以如果你想把你的MIDlet程序下载到设备上运行,你就得先用jar打包。具体的操作方法我会在以后讲述编写MIDlet程序时介绍。

CLDC的类库

如果不严格的说,CLDC的类库是J2SE的一个小的子集,有以下这种近似关系成立,即J2SE包含CDC包含CLDC。但要注意CLDC并未完全包含于J2SE,它还包括一 些专门针对无线设施的类。所以可以把CLDC的类库简要划分为两部分:从J2SE继承的类和CLDC专有的类。

(1)从J2SE继承的类

这部分包括三个package,即java.lang,java.util和java.io。注意即使这些从J2SE继承的的类,也是大大“缩了水”的。例如java.util的类与接口由J2SE的47个缩减到10个。另外两个也有相应缩减。

系统类

From java.lang:

Object, Class, Runtime, System, Thread, Runnable,

String, StringBuffer, Throwable

数据类型类

From java.lang:

Boolean, Byte, Short, Integer, Long, Character

容器类(container class)

From java.util:

Vector, Stack, Hashtable, Enumeration

I/O 类

From java.io:

InputStream, OutputStream, ByteArrayInputStream,

ByteArrayOutputStream, DataInput, DataOutput,

DataInputStream, DataOutputStream, Reader, Writer,

InputStreamReader, OutputStreamWriter, PrintStream

日期与时间类

From java.util:

Calendar, Date, TimeZone

附加的实用类

java.util.Random, java.lang.Math

异常类(Exception Classes)

From java.lang:

Exception, ClassNotFoundException,

IllegalAccessException, InstantiationException,

InterruptedException, RuntimeException,

ArithmeticException, ArrayStoreException,

ClassCastException, IllegalArgumentException,

IllegalThreadStateException, NumberformatException,

IllegalMonitorStateException, IndexOutOfBoundsException,

ArrayIndexOutOfBoundsException,

StringIndexOutOfBoundsException,

NegativeArraySizeException, NullPointerException,

SecurityException

From java.util:

EmptyStackException, NoSuchElementException

From java.io:

EOFException, IOException, InterruptedException,

UnsupportedEncodingException, UTFDataformatException

错误类

From java.lang:

Error, VirtualMachineError, OutOfMemoryError

(2)CLDC专有的类

这里sun提供了javax.microedition.io包。用它来提供与外界沟通的桥梁。(注:就像在J2SE中我们利用java.net.*)注意,所有的连接都由javax.microedition.Connector创建。例如:你可以打开一个http连接通过 Connector.open("http://www.chinajavaworld.com")

javax.microedition.io的接口包括:

Connection, InputConnection, OutputConnection,

StreamConnection, ContentConnection, DatagramConnection,

StreamConnectionNotifier

这里再说明一点,实际上你也可以看出,CLDC所包括的类库,并不足以开发应用程序。例如,没有UI界面的支持等。这也正是CLDC的设计理念。CLDC本身就从未想过要解决所有的问题。这些问题要靠其上层的Profile-MIDP来解决。例如javax.microedition.lcdui就是定义在MIDP中的UI包。

计算机世界开发者俱乐部 http://www.dev-club.com

(出处:http://www.knowsky.com)

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
>>返回首页<<
推荐阅读
 
 
频道精选
 
静静地坐在废墟上,四周的荒凉一望无际,忽然觉得,凄凉也很美
© 2005- 王朝网络 版权所有