`
ralphwho
  • 浏览: 5861 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

J2ME JSR75 FileConnection行为研究

    博客分类:
  • J2ME
阅读更多

最近在我的J2ME项目中,我想把JSR75的FileConnection类包装成类似J2SE中的File类来对文件进行操作,所以研究了FileConnection类的行为和在不同机器上的实现,以寻求最小的功能集合。之所以要抽象出一个File类,是因为我想将来用RMS模拟出一个文件系统。

 

这个File类能够通过简单的构造函数File(String path)来创建,并且提供部分FileConnection的功能。当然更重要的是提供简单的读写函数read(byte[] data),write(byte[] data)和获得InputStream,OutputStream。于是,接下来就要研究一下对于同一个文件,不同的操作系统,能够同时打开多少个FileConnection和多少个输入输出流。

 

在这之前,还有一个不能忽视的问题。J2ME系统对一些敏感的API进行了安全保护,没有签名的MIDlet如果要访问这些受保护的API,系统将会暂停当前程序并给用户一个提示,并由用户选择是否允许不受信任的程序访问这些API。

 

有些系统,如Moto和Siemens,对于FileConnection的访问可以选择只在第一次调用的时候询问,之后直到程序退出,都不会再向用户发出询问。也就是用户的选择可以在当前的整个会话Session中有效。

而对于目前相对主流的Symbian S60 v3系统则不是,每次调用FileConnectionAPI都会发出询问(没有"Session有效"的选项)。如果软件中有很多对文件的操作,不断弹出的系统提示必然会影响用户体验。想完全回避这些提示的唯一方法就是对软件进行签名。但是在S60 v3的系统下,对于我们开发者来说,想要签名一个MIDlet并且被系统承认几乎是不可能的。因为S60 v3系统中内置根证书签发机构的证书费用都非常昂贵,一年要上千美刀。

 

对于S60系统,我们能做的可能就是在软件中尽量少的出现这种系统提示,这就需要知道系统到底在调用FileConnection什么方法时才会弹出提示。于是我写了几行代码进行了测试。

 

在S60 v3 模拟器和Nokia E70上运行后得出,所有的安全提示只会在执行Connector.open方法时才会出现,FileConnection对象返回以后,调用它的任何方法都不会再出现提示。在Connector.open中如果用只读的方式创建FileConnection只会出现一次提示,如果用读写方式,则会连续的出现两次提示(一次读确认一次写确认)。在Moto的模拟器上测试,只读和读写方式分别只弹出一次提示,并且可以Session有效。

 

下面我又写了几行代码,测试了对于一个物理文件来说,可以同时创建多少个不同的FileConnection,获得多少个不同的InputStream和OutputStream。在WTK,S60 v3模拟器,Moto模拟器上测试,结果如下:

Moto模拟器和WTK的结果完全一样,怀疑Moto的是基于WTK的(很多地方他俩都很相似)。

 

OOM:一直跑到系统抛出OutOfMemory错误(我机器内存小啊),实际系统支持的最大数量无法测到,不过肯定是够用了。

 

软环境:JRE6.0+Windows Server 2003

  WTK,Moto模拟器 S60 v3模拟器
1个文件能创建的FileConnection实例数 OOM(5000+) OOM(1000+)
1个文件能创建的InputStream实例数(通过不同的FileConnection对象获得) 2043 1
1个文件能创建的OutputStream实例数(通过不同的FileConnection对象获得) 1021 OOM
1个FileConnection对象可返回的InputStream数 1 1
1个FileConnection对象可返回的OutputStream数 1 1
1个文件,FileConnectionA先打开一个InputStream,FileConnectionB再打开一个OutputStream 成功 IOException
1个文件,FileConnectionA先打开一个OutputStream,FileConnectionB再打开一个InputStream 成功 成功

这样的结果真是奇怪,反正最终得到,在S60 v3的机器上,一个文件只能且仅能通过同一个FileConnection对象得到一个InputStream和一个OutputStream。

 

另外,对于从Jar压缩包中读取文件,用getClass().getResourceAsStream(String path)得到InputStream,在所有测试平台上都是OOM。

 

由于WTK是建立在PC上的,它的J2ME实现有时候过于强大,功能太完善,往往迷惑了我们的眼睛。把程序拿到其他模拟器甚至是机器上,很多东西就不是那么回事了。要小心啊。

10
4
分享到:
评论
2 楼 iwinyeah 2008-03-24  
对了,你回复的我"加入FileConnection后,不支持的手机装入应用时会出现Class not found的错误"是不是没有办法解决呢?
1 楼 iwinyeah 2008-03-24  
个人认为,RMS的实现主要是针对小量数据的贮存需求而设计的,因此它在贮存大量数据时性能是较差的.我反而想使用文件来模拟实现RMS呢!

相关推荐

    fileconnection (jsr75)源代码

    【标题】"fileconnection (jsr75)源代码"涉及的是Java ME平台中的JSR 75规范,即“Java API for Wireless Toolkit (J2ME) - PIM API”。这个规范定义了如何在移动设备上访问文件系统、个人信息管理(PIM)数据以及与...

    jsr75 API J2ME手机程序文件系统

    **JSR75 API**,全称为Java Specification Request 75,是Java ME(J2ME)平台上的一项标准,主要用于在移动设备上提供文件系统访问的能力。这项API为开发者提供了在资源有限的移动设备上创建、读取、修改和删除文件...

    文件操作-JSR75包使用总结

    在J2ME开发中,JSR75是Java Community Process定义的一个标准,它为移动设备提供了文件系统和个人信息管理(PIM)的访问接口。本文主要聚焦于JSR75中的文件操作部分,总结了一些核心知识点。 首先,我们需要确定...

    J2ME API 速查手册0.7

    PDA FileConnection (JSR 75) J2ME Web Services RPC (JSR 172) Scalable 2D Vector Graphics API (JSR-226) SIP API (JSR 180) Wireless Messaging API 1.0 (JSR 120) WTK2.2 相关文档 Nokia UI API ...

    JSR75操作手机内存

    ### JSR75在J2ME平台上的应用与解析 #### 概述 JSR75(Java Specification Request 75)是针对J2ME平台的一组可选包,主要包含PIM API(个人信息管理应用程序接口)和FC API(文件连接应用程序接口),用于提供对...

    j2me-API.rar_bluetooth_j2me api 中文

    J2ME API 速查手册 本手册包含如下内容 ...PDA FileConnection (JSR 75) J2ME Web Services RPC (JSR 172) Scalable 2D Vector Graphics API (JSR-226) SIP API (JSR 180) Wireless Messaging API 1.0 (JSR 120)

    j2me fileconnection api

    **J2ME FileConnection API** 是Java Micro Edition (J2ME) 平台上用于处理文件I/O操作的一个重要API,它允许MIDlets(移动信息设备应用)与本地或远程文件系统进行交互。该API是Java社区进程(JSR)的一部分,具体...

    J2ME的API速查手册

    PDA FileConnection (JSR 75) J2ME Web Services RPC (JSR 172) Scalable 2D Vector Graphics API (JSR-226) SIP API (JSR 180) Wireless Messaging API 1.0 (JSR 120) WTK2.2 相关文档 Nokia UI API 1.1

    J2ME速查手册包括了多方面的内容

    PDA FileConnection (JSR 75) J2ME Web Services RPC (JSR 172) Scalable 2D Vector Graphics API (JSR-226) SIP API (JSR 180) Wireless Messaging API 1.0 (JSR 120) WTK2.2 相关文档 Nokia UI API 1.1

    j2me文件操作程序

    JSR 75主要定义了两个核心接口:FileConnection和FileTransfer,它们允许开发者创建、读取、修改和删除设备上的文件或目录。FileConnection接口提供了对文件系统的访问,而FileTransfer接口则用于在设备之间交换数据...

    J2me API 说明文档,比较全

    PDA FileConnection (JSR 75) J2ME Web Services RPC (JSR 172) Scalable 2D Vector Graphics API (JSR-226) SIP API (JSR 180) Wireless Messaging API 1.0 (JSR 120) WTK2.2 Ïà¹ØÎĵµ Nokia UI API ...

    Jsr75学习笔记(一) .txt

    `FileConnection` 是 JSR75 中最重要的类之一,它提供了一种标准的方式来与本地文件系统进行交互。开发者可以通过 `FileConnection` 来执行文件的读写、创建、删除等操作。 **关键方法:** - **`open(String url)`...

    jsr75.jar j2me file操作

    这个jar包是关于j2me中文件的操作的。

    javaMe+ api

    PDA FileConnection (JSR 75) J2ME Web Services RPC (JSR 172) Scalable 2D Vector Graphics API (JSR-226) SIP API (JSR 180) Wireless Messaging API 1.0 (JSR 120) WTK2.2 相关文档 Nokia UI API 1.1

    J2ME文件系统源代码

    JSR 75(Java API for PIM and File Access on Mobile Devices)是J2ME的一个规范,它为移动设备提供了个人信息管理和文件访问的接口。这个规范使得开发者能够创建应用,能够读取、写入和管理存储在设备上的数据,...

    J2ME文件操作

    JSR 75,即“Personal Java API for PIM (Personal Information Management)”,为J2ME提供了标准接口来访问和管理设备上的文件系统。 JSR 75 提供了 `javax.microedition.io.Connector` 和 `javax.microedition....

    J2ME中文教程

    通过JSR (Java Specification Request)标准,例如JSR-118 (Phone API) 和 JSR-185 (Mobile 3D Graphics),可以实现更复杂的设备控制。 **存储机制** 在J2ME中,RecordStore是用于存储非结构化数据的主要机制。...

    J2ME程序设计实例

    J2ME的MIDP 2.0引入了JSR-135(Java Media Framework for MIDP),支持音频和视频的播放。开发者需要学习如何打开媒体文件,控制播放,以及处理缓冲和错误处理。同时,设备兼容性和资源管理也是构建播放器时需要...

    经典j2me视频播放器代码.rar

    通过深入研究这个J2ME视频播放器的源代码,开发者不仅可以学习到如何在J2ME环境下实现视频播放,还可以了解到许多与移动开发相关的最佳实践和技术。这包括如何在有限的内存和CPU资源下进行高效编程,以及如何处理跨...

Global site tag (gtag.js) - Google Analytics