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());

无论在代码数量和可读性上看,这种方式确实不错。

jruby与java之间的交互,古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。