0

この問題についていくつかのスレッドがあることは知っていますが、サイズのために私の問題は少し異なると思います。

私の例では、テキスト ファイルに 170 万行を書き込みたいと考えています。最悪の場合、それ以上になる可能性があります。この行は、SQL ローダーが高速データをテーブルにロードするために作成されるため、SQL ローダーがそれを処理できるため、ファイルが非常に大きくなる可能性があります。

今、私はできるだけ早く大きなファイルを書きたいと思っています。これは私の実際の方法です:

BufferedWriter bw = new BufferedWriter(new FileWriter("out.txt"),40000);
int u=profils.size()-1;
for(int z=0; z<u;z++){
  for(int b=0;b<z;b++){
    p = getValue();
    if(!Double.isNaN(p) & p > 0.55){
      bw.write(map.get(z) + ";" + map.get(b) + ";" + p + "\n");
    }
  }
}
bw.close();

170 万行の場合、約 20 分かかります。私が知らない方法でそれをより速く処理できますか?

ファイルチャネル:

File out = new File("out.txt");
FileOutputStream fileOutputStream = new FileOutputStream(out, true);
FileChannel fileChannel = fileOutputStream.getChannel();
ByteBuffer byteBuffer = null;

int u=profils.size()-1;
for(int z=0; z<u;z++){
  for(int b=0;b<z;b++){
   p = getValue();
     if(!Double.isNaN(p) & p > 0.55){
        String str = indexToSubstID.get(z) + ";" + indexToSubstID.get(b) + ";" + p + "\n";
        byteBuffer = ByteBuffer.wrap(str.getBytes(Charset.forName("ISO-8859-1")));
        fileChannel.write(byteBuffer);
      }
   }
 }
fileOutputStream.close();
4

1 に答える 1

2

FileChannel はあなたの行く道です。大量の書き込みに使用されます。ここでAPIドキュメントを読んで ください

于 2013-04-19T18:41:11.623 に答える