質問

サイズは不明ですが、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はこの問題には適していると思います

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top