javax.iamgeioが遅いのか

http://d.hatena.ne.jp/shokai/20100629/1277804347
の続き


前のコードではjavaのBufferdImageがRubyのオブジェクトに毎回変換されている気がしたので
int配列でwidth,heightだけを返すJava classを作ってJRubyスクリプトから呼ぶ事にした。
Javaで配列で返せばRubyではtupleとして受け取れる。Mapで返せばHashで受け取れるので3値以上の場合はMapが良いかな

ImageSize.java

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.*;

public class ImageSize{

    public static int[] getSize(String filename) throws Exception{
	BufferedImage img = null;
	try{
	    img = ImageIO.read(new File(filename));
	}
	catch(Exception e){
	    throw e;
	}
	int[] result = new int[2];
	result[0] = img.getWidth();
	result[1] = img.getHeight();
	return result;
    }

}


image_size.rb

#!/usr/bin/env jruby
# -*- coding: utf-8 -*-

require 'java'
import 'ImageSize'

p ARGV.size

start = Time.now
ARGV.each{|name|
  begin
    width, height = ImageSize.getSize(name)
    puts "#{name} => #{width}, #{height}"
  rescue
    puts "#{name} => error"
  end
}

puts Time.now-start
javac ImageSize.java
jruby image_size.rb


まったく速くならなかった。