昨天,因为工作需要想了解下脚步引擎的实现原理,下载了一个 开源脚本引擎,研究了下, 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)QOG a 

 代码 

 
;wv2zD:bP3 
3GEYE+erGU4vzrz 

  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:^3 
3GEYE:vN|Ou:C1X$^ 

 下面看看我是怎么提高他的性能的。 

 
"s'O3K:xW4IZ,Rm,R)I3 
3GEYE(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%fNX"|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毫秒。 
3GEYEMG U,s4| A$t 

 快了非常多。 

 
/P:B`OX*H�E3不过脚本引擎除了读取源文件外,最重要的核心是解释引擎的速度。 
3GEYE%\_`K4?#s;Zv 


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