zoukankan      html  css  js  c++  java
  • J2ME结构与相关规范介绍

    J2ME的适用范围很广,而且针对J2ME的规范也在增加,很多人因为对各种规范的作用不了解造成对J2ME体系的误解。本文主要讲述一下 J2ME 的结构和构成,同时对一些容易混淆的概念进行解释。

    J2ME结构与相关规范介绍
     

    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上进行解释。l    l
    CLDC(Connected Limited Device Configuration,连接限制设备配置),运行在这一配置上的程序称为MIDlet ,在KVM上进行解释。l    l
    可以把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 针对的设备主要是数字电视、机顶盒、网络电话、车载计算设备等。这些设备的特点是:
        有线连接l
        电源稳定l
        设备外设资源比较受限l
    CLDC设备的最低配置为:CPU为16位、32位主频在 16MHz以上的处理器,设备的内存比较少,可能只有512KB,甚至更少。现在硬件的发展非常快,以前所定义的CLDC的设备目前的设备甚至远远超过原来的定义。不过请注意一下,J2ME 对CLDC设备配置的定义只是一个最低要求的定义。其实目前很多CLDC设备的配置都远远超过上面的配置,不过要分辨CLDC设备主要要从设备特点上进行区别。这些设备的特点是:
        无线连接l
        没有稳定的电源供应(通常使用电池)l
        设备外设资源极少l
    具体一点说如智能手机,例如: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 更高级。l
        IMP (Mobile Information Device Profile,信息模块简表):定义了提供网络连接,但是显示方式比较单一的设备简表,例如告警器。l
        Foundation Profile(基础简表):提供除了用户界面以外 J2SE 所能够提供的标准类库。l
        Personal Profile(个人简表):针对那些资源相对有限,但是对网络访问要求很高,基于AWT图形界面的设备,例如Web-TV、汽车导航系统等。l
    除这里提到的三个简表外还有其他类型的简表,但是上面的四个简表是Sun公司所推荐的,而且是开放的简表。例如以前的KJava就是和MIDP 类似的简表。
    J2ME内定义的各种规范介绍
    到目前为止,本文一共提到了几个规范:
        CLDC 规范:目前分为 v1.0 JSR 30,v1.1 JSR 139l
        CDC 规范:目前分为 v1.0 JSR 36,v1.1 JSR 218l
        MIDP 规范:分为 v1.0 JSR 37,v2.0 JSR 118l
        IMP 规范:JSR 195l
        FP 规范:JSR 46l
        PP 规范:JSR 62l
    这些规范都是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 带入了嵌入式设备这个领域,至少开发人员可以使用相同的开发模式来为嵌入式设备编写程序。

  • 相关阅读:
    使用 Spring data redis 结合 Spring cache 缓存数据配置
    Spring Web Flow 笔记
    Linux 定时实行一次任务命令
    css js 优化工具
    arch Failed to load module "intel"
    go 冒泡排序
    go (break goto continue)
    VirtualBox,Kernel driver not installed (rc=-1908)
    go运算符
    go iota
  • 原文地址:https://www.cnblogs.com/ahuo/p/368143.html
Copyright © 2011-2022 走看看