- 浏览: 166380 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
兰斯洛特1987:
顶!!!!谢谢分享.最近我也在研究这玩意...
Java语言的Hook实现 -
pu02203:
我把Confidant.jar, 丢进去eclipse, 里面 ...
重磅推出诛仙辅助软件第二波:Java版按键精灵 -
泣血端午:
Calculagraph 这是哪个类啊?
A星算法 -
haitaohehe:
我使用的是jstl1.0 可是在使用<c:set va ...
JSTL1.0和JSTL1.1的区别 -
micheal19840929:
学习楼主,我也测试一下~看看兼容性吧。lanlanzhilia ...
手机版飞鸽传书:无线牵
粗略的说j2me把设备分为两类,一种是联接设备( connected device),一种是有限联接设备(Connected, Limited Device)。前一种对应于那些有电源的,电力充裕,较大的设备。例如:电视机,冰箱等,后一种对应于主要使用电池,小型的设备,例如:手机,pda等。
这里我主要只涉及第二种,有限联接设备(Connected, Limited Device)。
sun把J2me的实现分为两层:configuration 和 profile。
configuration包括虚拟机(virtual machine),核心的类库与API。configuration层定义一个java虚拟机的特性与java类库的最小子集。也就是说,configuration层提供了开发人员一个最基础,最核心的Java平台。因为j2me把设备分为两类:联接设备(connected device)和有限联接设备(Connected, Limited Device)。对应这两种设备就有了两种J2ME configuration。分别为CDC(Connected Device Configuration)和CLDC(Connected, Limited Device Configuration)。这里请注意,CDC使用经典的javaVM,而CLDC使用的是KVM(The K Virtual Machine)。KVM是sun专门为使用16/32位RISC/CISC微处理器或控制器,并其可用内存为160kb~512kb的的设备而开发的。KVM比较小,通常只有128K或更少。
Profile层也包含一组API,主要针对于特定的某一族系的设备而定义。profile层在特定的
configuration层上实现,而我们程序员则负责在特定的profile上编写应用程序。对于手机,pda等Connected, Limited Device。它们的profile层称为MIDP(Mobile Information Device Profile)。于是MIDP与CLDC合在一起就构成了一个完整的J2ME架构。顺便说一句,对于MIDP上的应用程序sun也有独特的叫法,它们被称为MIDlet。你是不是觉得有点眼。想想java中的applet。
深入理解CLDC/MIDP
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)
类文件审核过程(classfiles Verification)
CLDC要求其下层的虚拟机能够辨别并拒绝非法的class文件。但由于CLDC本身面向小内存消耗的小型设备这一前提。其类文件检测机制与J2SE中定义的标准类文件审核机制还有所不同。
请注意上图所示CLDC中的预审核(preverification)过程。这是CLDC区别于通常的类文件审核过程的关键。如上图所示,当源程序被编译后,必须被预审核器预审核,然后才能被下载到目标设备上去。之所以有这一步骤,主要是为了减轻KVM中审核器的负担,加快审核速度。就像我前文提到的,这是出于对CLDC支持的硬件的考虑(毕竟手机和PDA并没有我们PC机那样奔腾的“芯”呀!^-^)。这里记住这个概念就行了。具体的操作方法我会在以后讲述编写MIDlet程序时介绍。
CLDC的类库API
如果不严格的说,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包。
MIDP对应的设备特性
由于MID这类设备,在屏幕、内存、处理器等问题上有诸多限制,在手机或是PDA等MID上开发应用程序必须要考虑一些技术上的特殊点。
下面给出一些MID设备的特性:
-
显示(display):96x54 (最小屏幕尺寸),1bit(最小色深,单色)
-
输入设备: “one-handed keyboard”(指ITU-T手机键盘),“two-handedkeyboard”(指标准键盘,即QWERTY键盘),触摸屏。
-
内存分配:128kb(MIDP组件);8kb(应用程序生成的Persistent data,关于Persistent data,我会在将来讲RMS时,详细说明,这里有个概念就行了);32kb(java runtime环境)
-
网络: 双向的,无线的,间断的,带宽有限的网络
-
内核(kernel):至少要能运行KVM。
还有很多软件上的特性,如读写non-volatile内存(就是掉电后不会失去内容的内存,如flash)。读写无线设备接口的API,等等。除了上诉技术上的问题,你还得注意你的程序要简单易用且稳定可靠。尤其是可靠性,你开发的是通讯设备,用户是不能忍受程序有什么纰漏而影响到通话的。你要牢记这一点。
MIDP的类库API
如前文所述,sun在CLDC之上定义了MIDP(Mobile Information Device Pro-file)层,用以提供对UI、永久存储介质(persistinace storage)、和网络等更高层的(相对于CLDC)支持。那么,让我们来具体看看MIDP的类库。
MIDP由四个javax.microedition包组成,它们包括:
-
javax.microedition.rms 关于永久存储介质(注:rms是Record Management System的缩写)
-
javax.microedition.midlet 定义了MIDlet的框架,以及MIDlet与环境的交互。
-
javax.microedition.io 网络支持
-
javax.microedition.lcdui UI(User Interface)(注:UI分为high-level和low-level两种API。)
注:如果在加上语言和实用类(java.lang和java.util)则有六个。
发表评论
-
J2ME的RMS
2010-04-10 23:32 2492在JAVAME中,程 ... -
M3G游戏中性能提升技巧
2010-03-28 17:59 736JSR184 M3G(Mobile 3D Grap ... -
在J2ME开发中获取系统属性
2010-03-27 18:21 507在J2ME开发中,我们经常需要和手机系统进行交互,获得一些和系 ... -
导出M3G文件指南
2010-03-25 12:54 940概述: 这 ... -
J2ME中使用microlog
2010-03-22 22:17 1395import javax.microedition.mi ... -
M3G教程:进阶篇(六)动画
2010-03-21 21:33 1299M3G中动画的数据结构如下: 【载入W ... -
3DS MAX导出M3G动画
2010-03-21 10:11 19831、用3D Studio Max或者Maya的插件h3texp ... -
M3G教程:进阶篇(四)模型
2010-03-21 01:18 1045import javax.microedition.lc ... -
M3G教程:进阶篇(三)纹理
2010-03-21 01:18 1015纹理(Texture) java.lang.Objec ... -
M3G教程:进阶篇(二)灯光
2010-03-21 01:16 1652灯光(Lighting) java.lang.Obje ... -
M3G教程:进阶篇(一)金字塔
2010-03-21 01:15 1196关于World public class World ... -
M3G教程:入门篇
2010-03-21 01:14 16253D技术对我们来 ... -
一点对m3g模型文件解析的工作
2010-02-11 09:49 848因为最近不会在m3g文件上继续工作,把之前一点少少的工作放出来 ... -
J2ME 3d之3DMAX制作M3G错误二例
2010-02-11 09:35 0(1) 在制作J2ME 3D所需的M3G时出现导出 ... -
M3G教程:进阶篇(五)立即模式
2010-02-09 23:51 0保留模式和立即模式渲染 保留模式是当你使用一个世界它含有的全 ... -
KVM的类加载
2010-02-09 15:46 811首先简要介绍一下class文件的结构(详细内容请参考Java虚 ... -
手机版飞鸽传书:无线牵
2010-01-30 21:02 2911【中文名】无线 ... -
FileConnection简介(JSR-75)
2010-01-29 01:17 8741 引言 本文档 ... -
J2ME添加自定义图标
2010-01-23 23:52 1354与图标有关的是这两行: MIDlet-Icon: ... -
j2me签名相关注意事项
2010-01-23 23:45 2011我们得到一个证书后就可以对j2me的jad文件进行签名。这 ...
相关推荐
1. **基础语法和结构**:了解Java的基本语法,如变量声明、控制流、类和对象,这是编写任何Java程序的基础。 2. **CLDC和MIDP API**:学习如何使用CLDC和MIDP提供的API,例如怎样创建用户界面,处理事件,以及如何...
1. **源代码示例**:这些示例可能展示了如何在CLDC和MIDP环境下编写Java代码,涵盖了从基本的数据类型、控制结构到高级的网络通信和用户界面设计。 2. **CLDC和MIDP API的使用**:代码可能包含了如何调用CLDC和MIDP...
3. **User Interface**:MIDP的用户界面构建基于Component和Container体系结构,类似于Java AWT和Swing。开发者可以使用Screen类来创建和管理用户界面。 4. **Application Life Cycle**:MIDlet有自己的生命周期,...
### Java™ Platform, Micro Edition (Java ME) CLDC – MIDP 2 for Sony Ericsson Feature and Entry Level Phones #### 概述 此文档为索尼爱立信(Sony Ericsson)发布的针对其功能手机及入门级手机上的Java平台...
深入剖析MIDP 2.0:理解CLDC与MIDP工具类别的核心价值 在深入了解MIDP 2.0(Mobile Information Device Profile)及其底层架构CLDC(Connected Limited Device Configuration)的过程中,我们首先需要关注的是MIDP...
总的来说,J2ME的CLDC/MIDP体系结构为移动开发提供了一个高效、安全的框架。开发者可以通过编写MIDlets来创建能在各种移动设备上运行的应用,同时通过CLDC利用有限的资源实现复杂的功能。理解CLDC的编程和MIDlet的...
- **CLDC/MIDP软件架构概述:** CLDC/MIDP软件架构为移动应用开发提供了基础框架。CLDC定义了核心的类库和支持服务,而MIDP则在此基础上扩展了更多功能,如用户界面、存储管理和网络通信等。 ##### 2.2 MIDlet及其...
(3)、CLDC和MIDP库中的类。 4、J2ME API的研究; (1)MIDlet应用程序的研究; (2)MIDlet的类库研究; (3)各事件发生器的应用。 5、开发工具的应用和开发环境的设置。 其中MIDP移动信息设备简表的研究和...
MIDP1.0是Profile层的一部分,它依赖于CLDC1.0,这是一个基础配置,定义了运行时环境的基本特性,如内存管理和类库。 **MIDP1.0的核心特性:** 1. **用户界面(UI)组件**:MIDP1.0提供了轻量级的用户界面组件,如...
CLDC的API旨在保持轻量级,同时提供基本的编程功能,以适应小型设备的内存和处理器限制。 **二、核心组件** CLDC API主要由以下几个核心组件构成: 1. **KVM(K Virtual Machine)**:这是CLDC的虚拟机,负责执行...
1. **KVM与CLDC/MIDP**:J2ME使用K Virtual Machine (KVM)作为其运行时环境,而Connected Limited Device Configuration (CLDC) 和 Mobile Information Device Profile (MIDP) 是J2ME的核心规范。CLDC定义了低内存...
配置定义了基本的硬件和软件需求,例如 MIDP (Mobile Information Device Profile) 配置,用于移动设备。profiles 建立在配置之上,提供了特定于设备或应用领域的功能,比如 CLDC (Connected Limited Device ...
(3)、CLDC和MIDP库中的类。 4、J2ME API的研究; (1)MIDlet应用程序的研究; (2)MIDlet的类库研究; (3)各事件发生器的应用。 5、开发工具的应用和开发环境的设置。 其中MIDP移动信息设备简表的研究和...
(3)、CLDC和MIDP库中的类。 4、J2ME API的研究; (1)MIDlet应用程序的研究; (2)MIDlet的类库研究; (3)各事件发生器的应用。 5、开发工具的应用和开发环境的设置。 其中MIDP移动信息设备简表的研究和...
对于移动设备而言,MIDP(Mobile Information Device Profile)、CLDC以及KVM(Kilovm,一种轻量级的虚拟机)构成了J2ME的基础架构。 #### 解析器类型 基于CLDC的XML解析器主要分为两种类型: - **拉式解析器**:...
总之,Java移动通信程序设计-J2ME MIDP涵盖了移动设备应用开发的基础知识,包括MIDP的结构、API使用、用户交互、网络通信和数据管理等,是开发者进入移动开发领域的入门教材。通过深入理解和实践这些概念,开发者...
MIDP 2.0是其一个重要的版本,增加了对CLDC(Connected Limited Device Configuration)1.1的支持,增强了图形处理能力和文件系统访问。 Sony Ericsson作为曾经的手机制造商,其设备广泛支持Java应用,因此这个教程...
通过以上内容可以看出,《Core J2ME Technology & MIDP》这本书涵盖了J2ME的核心技术和MIDP的应用开发,不仅适合初学者了解J2ME的基本概念和技术细节,也适合有经验的开发者深入研究该领域的高级主题。
最后,第19章“J2ME概述”介绍了Java Micro Edition,它是Java在移动设备和嵌入式系统上的应用,包括KVM和CLDC/MIDP框架。 这些课件全面覆盖了Java的学习路径,从基础语法到面向对象编程,再到高级特性和特定领域...