Androidで280KB程度のテキストファイルを高速に読む必要があり、ベンチマークを取ったのでメモっておきます。
バイナリとして読み込んで、文字列に変換する方法(1):
public static String readTextFromFileAll(String path) throws IOException { File f = new File(path); byte[] data = new byte[(int)f.length()]; BufferedInputStream bis = new BufferedInputStream( new FileInputStream(f)); bis.read(data); bis.close(); String fs = new String(data, "utf-8"); return fs; }
一行ずつ読み込む方法(2):
public static String readTextFromFileB(String path) throws IOException { File fi = new File(path); BufferedReader b_reader = new BufferedReader(new InputStreamReader( new FileInputStream(fi),"UTF-8")); StringBuilder sb = new StringBuilder(); String tmp; while((tmp = b_reader.readLine())!=null){ sb.append(tmp); sb.append('\n'); } return sb.toString(); }
これを1000回繰り返して読み込みます。
1 | 1348ms |
2 | 3008ms |
以上、一行ずつ読むより、一度全部をメモリに載せてしまった方が速いという結論でした。