サイズが不明であるが、mb から gb の範囲でコンテンツをランダムに埋めることができるファイルを作成する効率的な方法を探しています。最後にジャンプして最後の 200 バイトを書き込み、中央に移動してそこに書き込むよりも、最初の 200 バイトを書き込むことができます。これを行うのに効率的ですRandomAccessFile
か、またはこの種の仕事により適した代替手段はありますか?
3 に答える
はい、使用して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()
、ファイルも拡張されますが、現在のサイズよりも短い長さを指定すると、ファイルも切り捨てられます。基本的に torrent データを書き込むことについてのコメントを考えると、シークしてから書き込むことはまさにあなたが望む動作であると思われます。チャンクを受け取ったら、適切な場所を探して書き出すだけで、ファイルは必要に応じて拡張されます。
RandomAccessFile はそれを行う必要があります
この問題には RandomAccessFile で問題ないと思います