Janino例子程序

這個Janino例子主要實現將字符串編譯爲類然後加載使用,一次編譯,多次求值,循環中的表達式結構,始終不會改變。十分適用於大數據量的算法。

 

  1. package com.neusoft;  
  2.  
  3. /**  
  4.  * <p>Date       : 2012-03-22</p>  
  5.  * <p>Description: Janino使用例子</p>  
  6.  *   
  7.  * @author 小俊垃圾回收站  
  8.  *   
  9.  */ 
  10.  
  11. public interface Calculater {  
  12.      public void calculate(double[] result,double[][] d);  
  13. }  

 

 

  1. package com.neusoft;  
  2.  
  3. import java.io.StringReader;  
  4. import java.util.Date;  
  5.  
  6. import org.codehaus.janino.ExpressionEvaluator;  
  7. import org.codehaus.janino.Scanner;  
  8.  
  9. /**  
  10.  * <p> Date : 2012-03-22 </p>  
  11.  * <p> Description: Janino使用例子</p>  
  12.  *   
  13.  * @author 小俊垃圾回收站  
  14.  *   
  15.  */ 
  16.  
  17. public class TestJanino {  
  18.     public static void main(String[] args) {  
  19.         try {  
  20.             double[] d0 = new double[5000];  
  21.             double[] d1 = new double[5000];  
  22.             double[] r = new double[5000];  
  23.  
  24.             String code = "public void calculate(double[] r,double[][] d){" 
  25.                     + "    for(int i=0;i<5000;i++){" 
  26.                     + "      r[i]=d[0][i]+d[1][i]*2;" + "   }" + "}";  
  27.  
  28.             Calculater c = (Calculater) ExpressionEvaluator  
  29.                     .createFastClassBodyEvaluator(new Scanner(null,  
  30.                             new StringReader(code)), // 要計算的表達式  
  31.                             Calculater.class// 類型  
  32.                             (ClassLoader) null// 當前線程的上下文類加載器  
  33.                     );  
  34.  
  35.             for (int i = 0; i < 5000; i++) {  
  36.                 d0[i] = Math.floor(Math.random() * 100);  
  37.                 d1[i] = Math.floor(Math.random() * 100);  
  38.             }  
  39.  
  40.             double[][] d = new double[][] { d0, d1 };  
  41.             Date ds = new Date();  
  42.             c.calculate(r, d);  
  43.             Date de = new Date();  
  44.             System.out.println("耗時:" + (de.getTime() - ds.getTime()));  
  45.  
  46.         } catch (Exception e) {  
  47.             e.printStackTrace();  
  48.  
  49.         }  
  50.  
  51.     }  
  52. }  

 

 

Janino的網站http://www.janino.net  或者 http://docs.codehaus.org/display/JANINO/Home

介紹的很詳細

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章