私のプログラムではtxtファイルを読む必要があります。私は現在FileReaderとBufferedReaderを使っています。 Scannerを使用しようとしましたが、FileReaderとBufferedReaderよりも遅いです。ファイルをより速く読み取ることができるクラスはありますか? Java言語で記述する必要があります。私は、テキストファイルからすべての単語(空白でsplited文字列)を読む必要がJavaは、txtファイルから読み取る最も速いクラスです。
答えて
読み取り中のファイルが巨大な場合は、FileReader
の上にBufferedReader
を使用して読み取りパフォーマンスを向上させます。
またはあなたがlikethis何かを試す可能性があります -
BufferedReader br = new BufferedReader(new FileReader("file.txt"));
try {
StringBuilder sb = new StringBuilder();
String line = br.readLine();
while (line != null) {
sb.append(line);
sb.append("\n");
line = br.readLine();
}
String everything = sb.toString();
} finally {
br.close();
}
またはあなたがこのプログラムを試すことができます。これは、大きなファイルのために高速に動作します -
public String readDoc(File f) {
String text = "";
int read, N = 1024 * 1024;
char[] buffer = new char[N];
try {
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);
while(true) {
read = br.read(buffer, 0, N);
text += new String(buffer, 0, read);
if(read < N) {
break;
}
}
} catch(Exception ex) {
ex.printStackTrace();
}
return text;
}
読み込もうとするファイルは大きくなる可能性があります(100 MB以上)。 は今、私はより速くそれを行うことができます http://pastebin.com/WUaJUT1G のようにこれをやってイム? 私は大学でのプロジェクトのためにやっています。私はできる限り速くプログラムのすべての断片を作成する必要があります(リーディング、ツリーの作成、ツリー内の検索)。 – user1736332
このアプローチはより良いアプローチです。私はそれをチェックした。 –
@ user1736332: - 私は大きなファイルに対して速く動作するコードで自分の答えを更新しました。親切にチェックしてください。 –
コードの書き込みの観点から、最速、あなたがメモリ内のすべてのファイルを読み込むと仮定は、次のとおりです。
List<String> lines = Files.readAllLines(yourFile, charset);
私は、実行の観点からは、パフォーマンスはそれほど良くないと思うでしょう(これは、それを書いたチームによって最適化されたと思われます)。
これで分割したり、必要な処理を行うことができます。
読書と分裂の速度が85 MB/sec
です。 各行に20列の560MBのファイルを使用しました。 、分割なし:更新
read 561362951 bytes in 6575 ms
:私はsplitted = line.split(",");
代わりにsplit(line);
を使用する場合 、速度が32 MB/sec
アップデート2に低下
package csvreader_speedtest;
import java.io.*;
public class Csvreader_SpeedTest {
final char delimiter = ',';
String[] splitted = new String[64];
Csvreader_SpeedTest(String filename) throws Throwable {
File file = new File(filename);
BufferedReader reader = new BufferedReader(new FileReader(file));
String line;
long t0 = System.currentTimeMillis();
while ((line = reader.readLine()) != null) {
split(line);
}
long t1 = System.currentTimeMillis();
reader.close();
System.out.println("read " + file.length() + " bytes in " + (t1 - t0) + " ms");
}
private void split(String line) {
int idxComma, idxToken = 0, fromIndex = 0;
while ((idxComma = line.indexOf(delimiter, fromIndex)) != -1) {
splitted[idxToken++] = line.substring(fromIndex, idxComma);
fromIndex = idxComma + 1;
}
splitted[idxToken] = line.substring(fromIndex);
}
}
出力:ここ コードであります速度は194 MB/sec
です。どのくらい速くする必要がありますか?
/のような記号をすべて置き換える必要があります。 、! ? - ()[] {}:; '' '' '' ''(スペース)に分割し、その後に空白をすべて空白に分割する方法を教えてください。 – user1736332
これは間違いなく異なる質問です。スペースの文字列のすべての外観を置き換える最速の方法は? – Serg
ファイルが大きい場合はFiles.readAllLinesは機能しません。しかし、まだNIOを試してみたいのであれば、それは簡単です:
- 1. Java/.txtファイルから読み取る
- 2. ファイルからStringを読み取る最も速い方法は何ですか?
- 3. Javaのテキストファイルから読み込む最も速い方法は何ですか?
- 4. txtファイルのjavaエラーからintを読み取る
- 5. Python - txtファイルから最初の2行を読み取る
- 6. Javaでtxtファイルを読み込もうとしています
- 7. Javaはtxtファイルから特定の行から読み取られ、
- 8. リモートマシン上のイベントログを読み取る最も速い方法は何ですか?
- 9. Pythonは.TXT、ファイルを読み取る
- 10. リモートマシンでファイルを読み込む最も速い方法
- 11. Java GUI Swing、.txtファイルからの読み込み
- 12. .txtファイルから複数の値を読み取る方法は?
- 13. Matlabのtxtファイルから読み込み
- 14. C#で.txtファイルからキリル記号を読み取る方法
- 15. Runtimeコマンドでtxtファイルからユーザーの詳細を読み取る
- 16. txtからパラメータを読み取る
- 17. Java Servletからファイルを読み取る
- 18. ファイルからJavaプロパティグループを読み取る
- 19. xmlファイルをJavaから読み取る
- 20. ファイルからオブジェクトを読み取るJava
- 21. C++ Visual Studioで.txtファイルが読み取られない
- 22. なぜgoogle chromeは.txtファイルを読み取らないのですか
- 23. スプーン - txtファイルからSQLコードを読み取り、DBで実行
- 24. .txtファイルとFTPサーバーからデータを読み取る - スプレッドシート
- 25. .txtファイルから特定の行を読み取る
- 26. Matlab:.txtファイルから月を正しく読み取る方法
- 27. QTの.txtファイルからスペースを読み取る方法
- 28. 並列txtファイルからdaskデータフレームを読み取る
- 29. SDカードのtxtファイルからint値を読み取る
- 30. SQLの.txtファイルからデータを読み取る
ファイルからの読み込みがプログラムのボトルネックであるという具体的な証拠はありますか?後でデータを使って何をやっていますか?ファイルのサイズはどれくらいですか?私は 'FileReader'自身を避けることに注意してください - あなたが明示的にエンコーディングを設定できるように' FileInputStream'をラップする 'InputStreamReader'を使用してください。 –
ファイルを読むのではなく、ボトルネックが行を分割しているのでしょうか? String.split()を高速化する方法があります。私の経験から、BufferedReaderは非常に高速です。 – Serg
理論的には、Java NIOはIOよりも速くファイルを読み取ることができます –