正在开发的一个游戏,由于读地图的时候做了图片切割,所以速度比较慢。(在我开发上一个游戏的时候,读取地图时没有装载切割图片,速度非常快,看来IO操作的速度和createImage,drawImage相比是微不足道的)对于IO的优化也许根本不会明显的提高速度,但我还是试了一下。
分析了一下代码,在最初的代码中为了比较方便的读取各种类型的数据,使用DataInputStream套接InputStream。可是我仔细看了一下我读取得数据,居然都是byte,唯一的一个char也是被我用两个byte手工组装起来的。这下,DataInputStream看来是不需要了。于是我做了个实验,没改动之前读取地图耗时1242ms,将DataInputStream去掉直接使用InputStream耗时1065ms,虽然每次试验的结果都稍有不同,但大概还是节约了200ms左右。
还能再加快点吗?再观察一下代码,我发现数据是通过多次的read操作读取进来的。太过频繁的io操作会不会降低速度呢?如果用一个字节数组作缓冲一次性将数据都读进来会不会快点?嗯,试一试才知道。但是我怎么知道一个流的大小呢?InputStream的avaliable方法总是返回-1啊!打开两次流,第一次先计算大小?对了,还有一个方法。直接将文件大小写到文件前面。地图文件是用自己的编辑器生成的,知道大小很容易。于是我在文件前面用两个byte纪录了文件的大小,先从流中读取2个byte,得到文件大小后,再用read(byte[],int,int)方法将整个流读取到缓冲中。然后,我的所有数据操作都从缓冲中读取。好,试验一下,结果是:1154ms。阿?慢了近100ms。事实证明了这个猜想是错误的。原因?也许只有了解KVM的机制才知道。
弄完速度的问题,我又觉得读取文件的try块太大了,因为是边读边处理数据,所以try块变得很大。try块太大会增加class文件的大小。于是我用一个方法将读取byte的操作封装起来,当然这个方法是声明为privatestatic的,但究竟能不能内联,只有编译器和kvm才知道。在这个方法内部从流中读取一个字节的时候采用了try,catch结构,这就使一个大try块分散成若干小try块。试验了一下,耗时1089ms,诶,还是慢了点。现在对于速度的要求比空间更高,更何况减小try块节省的10几个字节打包后基本忽略不计了。所以这个优化又失败了。
小结:能使用简单流的时候就不要使用复杂流,不要太相信理论上的说法,只有试了才知道。
注:试验数据是Nokia3100手机的实机测试数据,在Nokia3300上这个数据更小些,最快约800多ms
分享到:
相关推荐
j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api j2me----api
【J2ME游戏源码---泡泡堂】是一个适合初学者和有一定基础的开发者研究的游戏项目,主要用于学习J2ME(Java Micro Edition)平台上的游戏开发技术。J2ME是Java平台的一个子集,专为资源有限的移动设备如手机、PDA等...
**J2ME游戏开发概述** Java 2 Micro Edition(J2ME)是Java平台的一个子集,主要用于开发在移动设备、嵌入式系统等资源有限的环境中的应用程序,特别是手机游戏。"J2ME游戏源码---bubble breaker"是一个基于J2ME的...
【标题】:“J2ME手机游戏开发--五子棋” 在移动设备技术发展初期,J2ME(Java 2 Micro Edition)是用于开发移动应用程序,尤其是手机游戏的主流平台之一。本项目是一个基于J2ME技术实现的五子棋游戏,展现了...
【标题】"j2me聊天室开发--群聊"涉及的是使用Java 2 Micro Edition (J2ME)技术创建一个支持多用户群聊功能的移动应用。J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机和平板电脑。这个项目的...
**J2ME开发详解——工具篇** 随着移动设备的普及,移动应用开发逐渐成为软件行业的热门领域,而Java 2 Micro Edition(J2ME)作为早期的移动开发平台,为开发者提供了进入这一领域的途径。本篇文章将深入探讨J2ME...
J2ME手机游戏--数独
基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化压缩PNG文件.zip 基于java的开发源码-J2ME优化...
基于J2ME的Java游戏--扑克豪斯的开发毕业设计论文 本论文设计和实现了一款基于J2ME技术的手机游戏程序--扑克豪斯。该程序的界面和运作方式与台式游戏豪斯相同,将老少皆宜的经典作品移植到手机上来,为更流行的硬件...
Eclipse开发J2ME之最佳插件-EclipseMe1.5.0,供大家一起参考学习。
通过陈跃峰老师的讲解,学员将不仅掌握J2ME的基本语法和API,还能了解到如何针对不同的移动设备进行优化和调试,从而开发出高效、实用的J2ME应用程序。课程可能包含实战项目和案例分析,帮助学员巩固理论知识并提升...
**J2ME技术手册——移动开发者的珍藏指南** **一、J2ME概述** ...综上所述,"J2ME技术手册"是一部全面覆盖J2ME开发的资源,对于想要深入理解和实践J2ME开发的开发者来说,是一份不可多得的参考资料。
J2ME平台的搭建 - 移动与游戏开发 - ITPUB论坛 - Powered by ITPUB_NET
总的来说,这个压缩包文件提供了一个学习J2ME游戏开发的机会,尤其是对于刚接触这个领域的人来说,可以通过分析源代码来了解游戏开发的基本流程和技巧,例如如何创建游戏循环、处理用户输入、显示图形以及实现基本的...
J2ME Loader_1.6.4-open.apk
J2ME Loader_1.4.4-open.apk
J2ME是Java平台的一个子集,用于开发和部署在嵌入式设备、移动电话和其他小型设备上的应用程序。 【描述】该代码示例表明,开发者是一个正在学习编程的新手,他根据书籍教程编写了这个扫雷游戏。游戏在诺基亚7610...
标题中的“J2ME编程——2种方法”指的是在Java 2 Micro Edition(J2ME)平台上进行应用程序开发的一种常见示例,特别是涉及到使用列表(List)组件和ticker组件来展示股票基金信息。J2ME是一种Java平台,用于开发运行...
### 知识点详解:精通J2me嵌入式开发 - 环境配置 #### 一、J2ME概述 J2ME(Java 2 Micro Edition)是Java平台的一个版本,专门针对移动设备和嵌入式系统设计,如手机、PDA、消费电子产品等。它基于Java的核心语言...