日期:2014-05-20  浏览次数:20574 次

J2ME 游戏脚本引擎/J2me game script engine 研究之一
原文 http://www.3geye.net/?3/viewspace-3187

昨天,因为工作需要想了解下脚步引擎的实现原理,下载了一个开源脚本引擎,研究了下,3GEYE ^9ys.p?^.p;G!s
如果大家需要下载的,请到我空间Google下,就可以发现这个脚本引擎的具体地址。3GEYEX6xWl(p Y!Cl)z1^$`
下面我来说下这个脚本引擎的一些性能问题。
![n t*w S` m3
%p6mw8VX3Qx;{ K%D5q3首先来看看他是怎么读取脚本文件的。3GEYE6C~3UC p4d8{
3GEYEQF)A$pt)Q OG a
代码
;wv2zD:bP33GEYE+er GU4vzrz
?InputStream is = new Object().getClass().getResourceAsStream(path);?? //j2me使用
0}%j6Ch}V'p3?ByteArrayOutputStream baos = new ByteArrayOutputStream();
MCd,`3n ~'S(|3?int ch = 0;
8|@DzXe:m2^O3??? while ( (ch = is.read()) != -1) {3GEYE.fv`!mwn(R
????? baos.write(ch);3GEYE$l | B8R"`jO
}3GEYE7{:AKw1ZF4}?j:T
上面是作者读取脚本文件代码,本人觉得这个代码的效率很低,一个个字符读取出来,速度很慢,我测试了下发现读取一个很简单的文件需要47毫秒,在Dell 1420的机器上。这样的效率是很可怕的。
Lp?EZ:^33GEYE:vN|Ou:C1X$^
下面看看我是怎么提高他的性能的。
"s'O3K:xW4IZ,Rm,R)I33GEYE(Gh6CO+G`
byte[] buff = new byte[512];3GEYE7u9]xA,?I
??? ??? ??? long total = 0;3GEYEQ In|*A[1P
??? ??? ??? int count = 0;3GEYE u J?J0d
3GEYEQ%fN X"|9W3JB
??? ??? ??? while ((count = is.read(buff)) > 0) {
*@)teb6P)df&e+r3??? ??? ??? ??? baos.write(buff, 0, count);3GEYE5`X;C,@g?P6i o
??? ??? ??? ??? total += count;3GEYEnM7S+Gp)}$L(JG-m
??? ??? ??? }
[]"|L%v8r$~3我是采用了一个512字节的缓冲区去读取这些数据,经过测试发现Dell 1420机器上的花费是0毫秒。3GEYEM G U,s4| A$t
快了非常多。
/P:B`OX*H?E3不过脚本引擎除了读取源文件外,最重要的核心是解释引擎的速度。3GEYE%\ _`K4?#s;Zv

Ee[:?i$Rm3有时间继续研究下。3GEYEjY-`8MTs