テキストファイルを指定文字数ごとに読み込む
ぐぐってもすぐにはヒットしなかったので、備忘録的にメモる。
テキストファイルを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