<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Java &#38; Game &#187; 脚本.kahlua</title>
	<atom:link href="http://www.javagg.com/archives/tag/%e8%84%9a%e6%9c%ac-kahlua/feed" rel="self" type="application/rss+xml" />
	<link>http://www.javagg.com</link>
	<description>java&#38;j2me</description>
	<lastBuildDate>Sat, 02 Jul 2011 08:59:18 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>kahlua java上的lua脚本介绍及性能测试</title>
		<link>http://www.javagg.com/archives/786</link>
		<comments>http://www.javagg.com/archives/786#comments</comments>
		<pubDate>Mon, 24 May 2010 10:03:35 +0000</pubDate>
		<dc:creator>纯净水</dc:creator>
				<category><![CDATA[java]]></category>
		<category><![CDATA[脚本.kahlua]]></category>

		<guid isPermaLink="false">http://www.javagg.com/?p=786</guid>
		<description><![CDATA[kahlua是一款基于CLDC1.1且非常小巧的Lua解释器，它很容易扩展。只需要配合一个Lua编译器，就可以执行编译后的Lua源代码。
也可以用在j2se上，而且速度还非常快！！支持把lua文件的编译执行，大家可以到http://www.oschina.net/p/kahlua 下载项目和交流此项目
以下是一个测试例子
java 代码



public static void main&#40;String&#91;&#93; args&#41; throws FileNotFoundException,


   IOException &#123;


  long l = System.currentTimeMillis&#40;&#41;;


  LuaState state = new LuaState&#40;System.out&#41;;


  UserdataArray.register&#40;state&#41;;


  OsLib.register&#40;state&#41;;


  LuaCompiler.register&#40;state&#41;;


  state.getEnvironment&#40;&#41;.rawset&#40;&#34;setPosition&#34;, new JavaFunctionSetPosition&#40;&#41;&#41;;


  // state = runLua(dir, state, new File(dir, &#34;stdlib.lbc&#34;));


  File testhelper = new File&#40;&#34;E:/work/zincscript/res/test.lua&#34;&#41;;


  LuaClosure closure = LuaCompiler.loadis&#40;new FileInputStream&#40;testhelper&#41;, testhelper.getName&#40;&#41;, state.getEnvironment&#40;&#41;&#41;;


  for &#40;int i = 0; i &#60; 10; i++&#41; &#123;


   state.call&#40;closure, null&#41;;


  &#125;


  System.out.println&#40;System.currentTimeMillis&#40;&#41; &#8211; l&#41;;


 &#125;


&#160;


class JavaFunctionSetPosition implements JavaFunction &#123;


&#160;


 @Override


 public int call&#40;LuaCallFrame callFrame, int [...]]]></description>
			<content:encoded><![CDATA[<p>kahlua是一款基于CLDC1.1且非常小巧的Lua解释器，它很容易扩展。只需要配合一个Lua编译器，就可以执行编译后的Lua源代码。</p>
<p>也可以用在j2se上，而且速度还非常快！！支持把lua文件的编译执行，大家可以到<a href="http://www.oschina.net/p/kahlua">http://www.oschina.net/p/kahlua</a> 下载项目和交流此项目<span id="more-786"></span></p>
<p>以下是一个测试例子</p>
<p>java 代码</p>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">public</span> <span class="kw2">static</span> <span class="kw4">void</span> main<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AString+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">String</span></a><span class="br0">&#91;</span><span class="br0">&#93;</span> args<span class="br0">&#41;</span> <span class="kw2">throws</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFileNotFoundException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">FileNotFoundException</span></a>,</div>
</li>
<li class="li1">
<div class="de1">   <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AIOException+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">IOException</span></a> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw4">long</span> l = <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">currentTimeMillis</span><span class="br0">&#40;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">  LuaState state = <span class="kw2">new</span> LuaState<span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li2">
<div class="de2">  UserdataArray.<span class="me1">register</span><span class="br0">&#40;</span>state<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">  OsLib.<span class="me1">register</span><span class="br0">&#40;</span>state<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">  LuaCompiler.<span class="me1">register</span><span class="br0">&#40;</span>state<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">  state.<span class="me1">getEnvironment</span><span class="br0">&#40;</span><span class="br0">&#41;</span>.<span class="me1">rawset</span><span class="br0">&#40;</span><span class="st0">&quot;setPosition&quot;</span>, <span class="kw2">new</span> JavaFunctionSetPosition<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="co1">// state = runLua(dir, state, new File(dir, &quot;stdlib.lbc&quot;));</span></div>
</li>
<li class="li2">
<div class="de2">  <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">File</span></a> testhelper = <span class="kw2">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFile+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">File</span></a><span class="br0">&#40;</span><span class="st0">&quot;E:/work/zincscript/res/test.lua&quot;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">  LuaClosure closure = LuaCompiler.<span class="me1">loadis</span><span class="br0">&#40;</span><span class="kw2">new</span> <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3AFileInputStream+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">FileInputStream</span></a><span class="br0">&#40;</span>testhelper<span class="br0">&#41;</span>, testhelper.<span class="me1">getName</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, state.<span class="me1">getEnvironment</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="kw1">for</span> <span class="br0">&#40;</span><span class="kw4">int</span> i = <span class="nu0">0</span>; i &lt; <span class="nu0">10</span>; i++<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">   state.<span class="me1">call</span><span class="br0">&#40;</span>closure, <span class="kw2">null</span><span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1">  <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">  <a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">out</span>.<span class="me1">println</span><span class="br0">&#40;</span><a href="http://www.google.com/search?hl=en&amp;q=allinurl%3ASystem+java.sun.com&amp;btnI=I%27m%20Feeling%20Lucky"><span class="kw3">System</span></a>.<span class="me1">currentTimeMillis</span><span class="br0">&#40;</span><span class="br0">&#41;</span> &#8211; l<span class="br0">&#41;</span>;</div>
</li>
<li class="li1">
<div class="de1"> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">class</span> JavaFunctionSetPosition <span class="kw2">implements</span> JavaFunction <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li2">
<div class="de2"> @Override</div>
</li>
<li class="li1">
<div class="de1"> <span class="kw2">public</span> <span class="kw4">int</span> call<span class="br0">&#40;</span>LuaCallFrame callFrame, <span class="kw4">int</span> nArguments<span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="co1">// System.out.println(callFrame.get(0));</span></div>
</li>
<li class="li1">
<div class="de1">  <span class="kw2">return</span> <span class="nu0">1</span>;</div>
</li>
<li class="li1">
<div class="de1"> <span class="br0">&#125;</span></div>
</li>
<li class="li2">
<div class="de2">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">lua 代码</div>
</li>
</ol>
</div>
<div class="dean_ch" style="white-space: wrap;">
<ol>
<li class="li1">
<div class="de1">a=<span class="nu0">0</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">do</span> print<span class="br0">&#40;</span>a<span class="br0">&#41;</span> end</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span> i = <span class="nu0">1</span>, <span class="nu0">1000000</span> <span class="kw1">do</span></div>
</li>
<li class="li1">
<div class="de1"> a = a<span class="nu0">+1</span></div>
</li>
<li class="li2">
<div class="de2"> setPosition<span class="br0">&#40;</span>i<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">end</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">do</span> print<span class="br0">&#40;</span>a<span class="br0">&#41;</span> end</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
</ol>
</div>
<p>以上意思是运行1000000次setPosition方法 , setPosition是一个java的方法。<br />
运行结果是700ms，1000000 次才700ms非常不错了<br />
groovy运行时间也是700ms左右</p>
]]></content:encoded>
			<wfw:commentRss>http://www.javagg.com/archives/786/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

