Java で大きなファイルに対して単純な grep やその他の操作を実行する必要があります。私は Java NIO ユーティリティにあまり詳しくありませんが、それを使用する必要があると思います。大きなファイルを読み書きするためのリソースや役立つヒントを教えてください。また、私は SWT アプリケーションに取り組んでおり、GUI のテキスト領域内にそのデータの一部を表示する必要があります。
3 に答える
java.io.RandomAccessFile
ファイルポインターのオフセットに long を使用するため、対処できるはずです。ただし、一度にチャンクを読み取る必要があります。そうしないと、オーバーヘッドが高くなります。FileInputStream
同様に動作します。
Java NIO はそれほど難しくないはずです。Selector
s などをいじる必要はありません。実際、JDK7 より前では、ファイルを選択することはできません。ただし、ファイルのマッピングは避けてください。アンマップがないので、何度も実行しようとすると、32 ビット システムでアドレス空間が不足するか、他の問題が発生します (NIO は GC を呼び出そうとしますが、これはちょっとしたハックです)。
特別な処理を行わずに、ファイル全体を一度に1チャンクずつ読み取るだけの場合は、nioとjava.io.RandomAccessFile
おそらくやり過ぎです。ファイルの内容を一度に1ブロックずつ読み取って処理するだけです。BufferedInputStream
必ずまたはを使用してくださいBufferedReader
。
実行していることを実行するためにファイル全体を読み取る必要があり、一度に1つのファイルのみを読み取る場合、nioのメリットはほとんどありません。
トピックから少し外れているかもしれません:apacheによるVFSを見てください。これは元々、アプリケーションの観点から、ファイルシステムファサードの背後にあるftp-http-file-whateverシステムを非表示にするためのライブラリであることが意図されています。このライブラリを使用して、検索、読み取り、コピーなど(このコンテキストでは大きいとは15MBを超える)のために大きなファイルに(ftp経由で)アクセスした経験があるため、ここで言及します。