J2ME下载、本地存储案例二则

 

用J2ME开发一些手机应用程序,不可避免的要接触到联网操作以及文件的上传和下载。由于种种客观条件限制,这部分调试也是相对比较麻烦的。
下面有几条需要注意的事项,新手非常容易遇到的问题。(这两个case也困扰了我一段时间.)


Case 1 .通过HttpConnection下载图片,显示,并通过FileConnection存储。


通过HttpConnection获得输入流之后,首先通过Image.createImage(InputStream stream)方法生成了下载的图片,然后显示在页面。这时,我还想存储怎么办?如果还用这个输入流,就会出问题了。查询一下API,可以发现其中的玄机。
public static Image createImage(InputStream stream)
                         throws IOExceptionCreates an immutable image from decoded image data obtained from an InputStream. This method blocks until all image data has been read and decoded. After this method completes (whether by returning or by throwing an exception) the stream is left open and its current position is undefined.

 

看了后几句有点发蒙。。。经过测试,这个流没有被close掉,但是通过available()方法测试,返回值为0,可见这个输入流此时已经不包含有用的信息了,已经没有意义了。


解决方法:如果想下载这个文件的话,就要先下载,然后再打开下载的笨的文件后,显示在页面上。这个输入流是不能复用的!

 

 

Case 2 .下载一个音乐或者视频,并存储。
下载大文件,容易犯错的就是一次性把输入流转化成byte数组,再将比特数组一次性写入文件输出流。这种方法对读取小文件没问题,但是对于上M级别的大文件,就会报错,提示内存溢出。


解决办法就是不能一次性的把输入流写入内存,而是通过缓冲甚至一个字节一个字节的读出和写入,这样就可以解决大体积文件下载的问题了。当然,这样效率会比较低。如果希望效率更高一些,我觉得把大体积切割成多分小文件(具体多少份,看需要吧,但据说J2ME是对线程总数有限制,这也要注意),然后通过多线程下载,每个线程要记载数据的偏移量。这样,效率会显著提升。

 

本人能力有限,有不正确之处,请各位给予指正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
J2ME(Java 2 Platform, Micro Edition)是由Sun Microsystems开发的一种Java平台,专门用于在移动设备上运行应用程序。MIDP(Mobile Information Device Profile)是J2ME的一个子集,它定义了在移动设备上运行的应用程序的规范和功能。而MIDP 2.0则是MIDP的第二个版本。 MIDP 2.0增加了许多新的功能和改进,使得开发者能够创建更强大和多样化的移动应用程序。它提供了一个可扩展的用户界面,包括支持图形、文本和交互控件。此外,MIDP 2.0还引入了支持浏览器和网络协议的API,使开发者可以轻松地在移动设备上进行网上浏览、发送和接收数据。 MIDP 2.0还加强了网络通信的能力,引入了新的网络连接API,如HTTP和Socket连接。这使得开发者能够通过互联网或网络进行数据交换和通信。同时,它还支持存储和管理数据的持久化功能,允许应用程序在重启后保留数据。 除了以上功能,MIDP 2.0还提供了音频和视频支持,使开发者能够创建媒体相关的应用程序。开发者还可以利用MIDP 2.0的游戏API创建游戏应用程序,包括图形、动画和触发事件等功能。 总之,J2ME MIDP 2.0是一种用于移动设备的Java平台和规范,提供了丰富的功能和API,使开发者能够创建各种各样的应用程序,包括用户界面、网络通信、数据存储、音频视频和游戏等。它的出现大大促进了移动应用程序的发展和普及。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值