Java を使用して、約 5 ~ 6 GB の大きなテキスト ファイルを行ごとに読み取る必要があります。
これを早く行うにはどうすればいいでしょうか?
ベストアンサー1
一般的なパターンは、
try (BufferedReader br = new BufferedReader(new FileReader(file))) {
String line;
while ((line = br.readLine()) != null) {
// process the line.
}
}
文字エンコードがないと仮定すると、データをより速く読み取ることができます。たとえば、ASCII-7 ですが、それほど大きな違いはありません。データに対する操作には、はるかに長い時間がかかる可能性が高くなります。
編集: リークの範囲を回避するために使用する、あまり一般的ではないパターンline
。
try(BufferedReader br = new BufferedReader(new FileReader(file))) {
for(String line; (line = br.readLine()) != null; ) {
// process the line.
}
// line is not visible here.
}
更新: Java 8では次のようにできます
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
stream.forEach(System.out::println);
}
注意: ストリームをリソースを試すブロックして、#close メソッドが確実に呼び出されるようにします。そうしないと、GC がずっと後になってから実行するまで、基になるファイル ハンドルが閉じられません。