0

私はコードの一部を持っています。

File file = new File(path);
FileReader fr = new FileReader(file);
BufferedReader br = new BufferedReader(fr);
String temp;
StringBuffer sb=new StringBuffer();
while((temp=br.readLine())!=null){          
   sb.append(temp);
   sb.append(" ");
}

これにより、ファイルからすべての行が読み取られ、StringBuffer に格納されます。私のファイルは非常に巨大で、処理を高速化するためにファイルをマルチスレッド化する必要があります。ファイルの 1/4 だけをバッファに書き込むように言う方法はありますか?

私はこれを言うことができないことを知っています。しかし、私はこれに相当するものが欲しいです。

for(int i=0; i<reader.length/4; i++)
4

2 に答える 2

1

スレッドごとに 1 つのファイル チャネルを作成し、それをファイルのオフセットで使用できるはずです。ファイル チャネルから、ファイルのサイズを取得して分割を計算し、現在の場所を設定できます。

于 2013-02-24T00:53:01.570 に答える
0

いいえ、ファイルを同時に読み取ることができないため、これを回避することはできません。一度にストリームから読み取るスレッドが 1 つだけの場合、これは同時に発生することも、並行して発生することもありません。したがって、そこには何のメリットもありません。これとは別に、コードの記述と読み取りがはるかに難しくなり、安価ではない多くのスレッド コンテキスト スイッチとスレッド アービトレーションが必要になります。

できることは、大きなファイルを書き込む代わりに、より小さなファイルを書き込むことです。読み取りデータの処理に時間がかかる場合は、バッファーを読み取り、そのバッファーがメモリにロードされた後、並行して処理します。大丈夫。

また、単一のスレッドを使用している場合は、StringBuffer の代わりに StringBuilder を使用してください。

お役に立てれば。

于 2013-02-24T00:21:23.613 に答える