大きなファイルへのJavaアクセス
-
06-07-2019 - |
質問
サイズは不明ですが、mbからgbの範囲のファイルを作成し、その内容をランダムに埋める効率的な方法を探しています。末尾にジャンプして最後の200バイトを書き込み、中央に移動してそこに書き込むよりも、最初の200バイトを書き込むことができます。 RandomAccessFile
はこれを行うのに効率的ですか、またはこの種のジョブにより適した代替手段はありますか?
解決
はい、 RandomAccessFile
を使用します-それが目的です。あなたは潜在的に FileChannel
を使用することができますが、私は最初に RandomAccessFile
に行きます-それはより簡単である可能性が高いです。
「中央に挿入」することはできませんのでご注意ください。最後の部分を書いた後のファイルの:私はそれをサポートするファイルシステムを知りません。基本的に、最終セクションを作成する前に、完全なサイズを知る必要があります。別の方法は、最後まで最後のビットを記憶して、順番に書き込むことです。
実行する必要のある情報(およびサイズに関する情報がある場合)についての詳細情報を提供できる場合は、さらにサポートできる場合があります。
編集:特定のサイズのファイルを作成するには、末尾を seek()
してデータを書き込みます:
import java.io.*;
public class Test
{
// Just for the sake of a simple test program!
public static void main(String[] args) throws Exception
{
RandomAccessFile file = new RandomAccessFile("file.dat", "rw");
file.seek(100);
file.write(0);
file.close();
}
}
これが終了すると、 file.dat
の長さは101バイトになります。 (通常はtry / finallyなどを使用することに注意してください)
編集:coobirdがコメントで言及したように、 setLength()
はファイルを拡張しますが、現在のサイズより短い長さを指定するとファイルを切り捨てます。基本的に急流データを書くことについてのあなたのコメントを考えると、シークしてから書くことはまさにあなたが望む行動だと思います。チャンクを受け取ったら、適切な場所を探して書き出すだけで、必要なときにファイルが拡張されます。
他のヒント
RandomAccessFileはそれを行う必要があります
RandomAccessFileはこの問題には適していると思います