jruby与java之间的交互
上一篇文章介绍的是jypthon,这里再介绍一种jruby的。到jruby下载最新的jruby-complete-1.7.11.jar包。
还是把一段字符串压缩,再用base64编码。如果用java语言实现,代码如下。
public static byte[] compress(byte[] data) { byte[] output = new byte[0]; Deflater compresser = new Deflater(); compresser.reset(); compresser.setInput(data); compresser.finish(); ByteArrayOutputStream bos = new ByteArrayOutputStream(data.length); try { byte[] buf = new byte[1024]; while (!compresser.finished()) { int i = compresser.deflate(buf); bos.write(buf, 0, i); } output = bos.toByteArray(); } catch (Exception e) { output = data; e.printStackTrace(); } finally { try { bos.close(); } catch (IOException e) { e.printStackTrace(); } } compresser.end(); return output; }
上面是压缩,下面是encode
String str = new BASE64Encoder().encode(compress("hello world" .getBytes()));
如果用jruby实现,代码如下:(需要说明,要懂ruby语言才行)
ruby脚本文件test.rb:
require "base64" require "zlib" def dump(s) deflated = Zlib::Deflate.deflate(s) encode=Base64.encode64(deflated) return encode end
jruby代码:
ScriptingContainer container = new ScriptingContainer(); Object receiver = container.runScriptlet(PathType.ABSOLUTE, "src/test.rb"); RubyString obj = container.callMethod(receiver, "dump", "hello world", RubyString.class); System.out.println(obj.toString());
无论在代码数量和可读性上看,这种方式确实不错。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。