文字列連結の動作速度の検証

Java6ではJavaScriptを利用できるのは言うまでもないのですがファイルを読込む場合にはjava.langのStringBuilderを利用したら早いか、+=の連結がいいか。自前でつくったほうがいいかの検証。

var text = '';
var buf, BufferedReader = java.io.BufferedReader;
var fis, FileInputStream = java.io.FileInputStream;
var isr, InputStreamReader = java.io.InputStreamReader;

try
{
    fis = new FileInputStream("foo.txt");
    isr = new InputStreamReader(fis);
    buf = new BufferedReader(isr);

    while(buf.ready()) text += buf.readLine();
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~  // 遅いぜ><!

    fis.close();
    isr.close();
    buf.close();
}
catch(e)
{
}
java.lang.StringBuilder使ってみる。
var str = new java.lang.StringBuilder();
while(buf.ready()) str.apend(buf.readLine());
JavaScriptで簡易的なStringBuilderみたいなのをつくって見る。
// 簡易すぎ(笑)
String.Builder = function()
{
   var i = -1, b = [];
   this.append = function(s)
   {
      b[++i] = s;
   };
   this.toString = function()
   {
      return b.join('');
   };
};

var str = String.Builder();
while(buf.ready()) str.append(buf.readLine());
実行結果
  • 560ms(+=での連結)
  • 430ms(StringBuilder)
  • 410ms(String.Builder)

という結果です。72文字×1000行のテキスト読込ました。まあ軽いテキストを読込んでトータルの時間を考えたときを考えるとどうなのか分かりませんが…。