大容量のファイルの読み込みとファイルストリームを解決するためのJavaメモリの問題の比較
伝統的な方法
一般的にメモリから読み出さ論文は、そのようなBufferedReaderの、入力ストリームシリーズなどの公式のいくつかの方法、そして、また、ApacheのコモンズIOグァバとしてパッケージ化し、読み取りファイルに高速な方法を提供するリーディング
Files.readLines(new File(path), Charsets.UTF_8);
FileUtils.readLines(new File(path));
追加のスキャナは、走査方法で読み出すためにBufferedReaderの又はサブクラスLineNumberReaderを達成するために利用され、効率が非常に遅いです。それはワンタイムメモリストレージことができない大容量のファイル、あり、そしてすべてのデータファイルを使用するためのワンタイムの必要性を必要としない場合また、問題があります。
反復読み取りモード
一般的なシナリオでは、我々は、同様のプロセスは、スキャナが、イテレータのようなこのような方法で、その全体がメモリに配置する必要がないメモリへのデータの行を読み取る必要がある、それを捨てる別々に処理加工することですシーンは、行ずつ読み込まれたばかり,,利点は、あなたが特定の形式でデータを読み取ることができることに対処するのは簡単ですが、それは非常に遅いです。
inputStream = new FileInputStream(path);
sc = new Scanner(inputStream, UTF-8);
while (sc.hasNextLine()) {
String line = sc.nextLine();
// System.out.println(line);
}
もう一つの方法は、Apache CommonsのIOがフォーマットスキャナのユーティリティクラスのfileutils、劣った治療法があることをストリーミング使用することですが、効率とBufferedReaderはほとんど、それは一般的に、このいずれかをお勧めします。
LineIterator it = FileUtils.lineIterator(file, UTF-8);
try {
while (it.hasNext()) {
String line = it.nextLine();
// do something with line
}
} finally {
LineIterator.closeQuietly(it);
}
参照
https://www.breakyizhan.com/java/4018.html
https://www.jianshu.com/p/7a81f603fe1d
https://www.cnblogs.com/lovebread/archive/2009/11/23/1609122。 HTML