2009-06-23 7 views
5

私は、サイズが不明だが、mbからgbの範囲にあり、その内容をランダムに埋め込むことができるファイルを効率的に作成する方法を探しています。私は、最後に200バイトを書き込んで最後の200バイトを書き込んで、中央に移動して書き込むかもしれません。 RandomAccessFileはこれを行うのに効率的ですか、またはこの種の仕事に適した代替手段がありますか?大きなファイルへのJavaアクセス

答えて

10

はい、RandomAccessFileを使用してください。それはそのためのものです。あなたはFileChannelを潜在的に使うかもしれませんが、私はRandomAccessFileの方が先です - それはもっと簡単だろう。

最後の部分を書き込んだ後、ファイルの「中央に挿入する」ことができないことに注意してください。それをサポートするファイルシステムはわかりません。基本的に最後のセクションを書く前に、完全なサイズを知る必要があります。代わりに、最後まで最後のビットを覚えて、順番に書き込むことができます。

私たちにあなたが何をする必要があるかについてのより多くの情報を与えることができます(そしてあなたがサイズに関する情報を持っている場合)。

EDIT:この後

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バイトの長さになります。特定のサイズのファイルを作成するには、エンド過去seek()、その後はデータを書き込むことができます。

EDITを(なお、通常、あなたは最終的に/試すなどを使用したい):コメントで述べたcoobirdとおり、setLength()も、ファイルを拡張します - しかし、あなたは現在未満の長さを与える場合、それはまた、ファイルが切り捨てられますサイズ。基本的にトレントデータを書くことについてのあなたのコメントを考えれば、私はシークして書くことがまさにあなたが望む行動だと思っています。あなたがチャンクを受け取ったら、ちょうど正しい場所を探してそれを書き出し、必要なときにファイルを拡張します。私はのRandomAccessFileを推測

+0

反復と書くよりも、他のプレフィックスサイズのファイルを作成する方法はありますを行う必要があり、すべてゼロのまたは1つの、それを埋めるために? –

+0

これを反映するための編集。 –

+0

ありがとう、ファイルにランダムな部分を書き込む理由は、私はtorrentクライアントを実装していて、ファイル内のランダムな場所にピースが届くのですが、ファイル全体のサイズを手前に知っています。 –

1

は、この問題の罰金です

関連する問題