Androidのアプリを作っていて、テキストフォーマットのデータを読み込むのに、java.lang.String.split() を使っていたらやたら遅かった。
で、java.util.StringTokenizerに切り替えたら早かった。
ん~ C言語なら、strtokとか、ポインタを使っての実装になっているから早いのは分かるんだけれど、Javaの文字列分割でそんなに違いが出るとは思わなかった。
って事で、知り合いに相談してみたら、正規表現のせいじゃない?という話だった。
確かに・・・
String.split() は正規表現が使えるんだよね。
後、考えられるのはメモリの使い方かな。
StringTokenizer はnextToken() を呼び出したときに、メモリを確保して、文字列分割して返してもいいけれど、String.split() は配列を返すからそれが出来ない。
javaの道だと、StringTokenizerは推奨されていない。と書かれていたけれど、SunのJavaDocでは特にそういう記述は見られなかったから、StringTokenizerを使おうかな。
文字列関係では、apache.commons.StringUtil とか、結構使ったりするねー
http://commons.apache.org/
しかし、高速化を図るならやっぱり、C++がいいいね。自分が余りJavaのライブラリを知らないだけなのかなぁ
C++で組んであるプログラムを、今Javaに置き換えているんだけれど、Javaでどうやって書けば・・・ってのがたまーにある。
ifstreamが使いやすいってのもあるんだけれどね。
とりあえず、Javaで殆ど組んでしまって、高速化したいところはJNIで組むかな。
フォーマット解析なんか、JNIで組めるところだし。
ってか、今はテキストフォーマットを分かりやすいから使っているけれど、最終的にはバイナリファイルから読み込むから、あんま変わらなくなるのか~
0 Comments.