私は巨大なファイル(> 1GB)を読み込もうとしていますが、バッファ付きリーダーを使用してランダムアクセスファイルとして読み取るのが効率的だと考えています。
ファイルを1行ずつ読み取り、解析する必要があります
ただし、JAVA IO Apiは初めてなので、どうすればよいかわかりません。
私はあなたの助けに感謝します。
これには、JavaのBufferedReaderを使用できます。
BufferedReader reader = new BufferedReader(new FileReader(fileName));
String line;
while ((line = reader.readLine()) != null) {
// Do some stuff with the line
}
fileName
読み取りたいファイルへのパスです。
すべてを最初から読む必要がありますか?開始できるバイトがわかっている場合は、RandomAccessFileを使用してファイルのさまざまな部分にジャンプできます。これを行うのはシーク関数だと思います。
これはJavaで完全に実行可能ですが、私の経験に基づいて提案したいと思います。
Unixプラットフォームを使用している場合は、外部シェルスクリプトを使用してGBのログを検索できます。sed
この目的には非常に最適です。ここでの特定の使用法:http ://www.grymoire.com/Unix/Sed.html
ログファイルを読み取ったりgrepしたりする必要があるときはいつでも、Javaファイルを介してシェルスクリプトを呼び出します。
どのように?
1)Javaコードで、ProcessBuilder
クラスを使用します。コンストラクターへの引数としてシェルスクリプトを取ることができます
ProcessBuilder obj = new ProcessBuilder("FastLogRead.sh");
2)プロセスのオブジェクトを作成します
Process process = obj.start();
3)このシェルの出力は、BufferedReadで直接読み取ることができます。
BufferedReader br=new BufferedReader(new InputStreamReader(process.getInputStream()));
長所:
平均で実行を高速化します。10回(約4GBのログファイルを検索しました)
短所:
一部の開発者は、Javaの領域に軽量のシェルスクリプトを導入することを好まないため、Javaを使用したいと考えていRandomAccessFile
ます。これは正当化されます。
あなたの場合、標準化とパフォーマンスのどちらかを選択できます。