気まぐれな備忘録(仮)

いちようSEしてるので、プログラミングの備忘録的なものを書いてます

テキストファイルを指定文字数ごとに読み込む

ぐぐってもすぐにはヒットしなかったので、備忘録的にメモる。

テキストファイルを1行ごとに読み込むのはBufferedReader#readLine()が有名。
今回やりたいのは、指定文字数ごと、たとえば100文字ごとにファイルを読み込むこと。

Reader#read()が1文字だけ読み込むので、
これを100回ループさせればいいのだが、性能悪そう。

ということで、標準APIを調べてみたら、Reader#read(char[])が見つかった。
引数のchar
の配列長を100にすれば100文字ごとに読み込むみたい。

試しに1GBのテキスト1ファイルを
read()とread(char[])でそれぞれ読み込んだら、
前者が70秒近くかかったが、後者は5秒程度で済んだ。

確かにread()は性能わるぽとOracleのページにも紹介されていたので、
read(char[])を使う方がよさそう。

ちなみに動作確認で実装したコードはGitHubに公開済み。
さすがに1GBのテキストは上げてないが。
https://github.com/kajitiluna/ReadTextSample