0

私はこのコードが基本的にバッファリングされたライターを介してファイルに書き込む以下のコードを書いています.JDK 1.5を使用しています.ファイルのサイズは約 1GB ですが、Java が JDK 1.5 で提供する、ファイル ライター プロセスをさらに高速化し、パフォーマンスを向上させる代替手段はありますか?

 File file = new File(FilePath + getFileName());
 try (BufferedWriter bw = new  BufferedWriter(new FileWriter(file))) {
   for (Posuser posuser : totalusers) {
     for (potook bk : books) {
       if ((posuser.getUpdatedBy() == null)
           && (posuser.getUpdateddateformat() == null)) {
         bw.write("aaa"+"\r\n");
       } else if (posuser.getUpdatedBy() == null
                  && posuser.getUpdateddateformat() != null) {
         bw.write("bbb+"\r\n");
       } else if (posuser.getUpdatedBy() != null
                  && posuser.getUpdateddateformat() == null) {
         bw.write("ccc"+"\r\n");
       } else {
         bw.write("ddd"+\r\n");
       }
     }
   }
 } catch (IOException, AnotherException e) {
   logger.error(e.getMessage());
 }
4

3 に答える 3

1

これにより、少なくともメモリ効率が向上するはずです。ブログ: String intern文字列+はコストのかかる操作ですStringBuilder。代わりに使用する必要があります。

   final String aaaString = "aaa".intern();
    final String bbbString = "bbb".intern();
    final String cccString = "ccc".intern();
    final String dddString = "ddd".intern();
    final String EOL = "\r\n".intern();

    File file = new File(FilePath + getFileName());
    try (BufferedWriter bw = new  BufferedWriter(new FileWriter(file))) {
      for (Posuser posuser : totalusers) {
        for (potook bk : books) {
          if ((posuser.getUpdatedBy() == null)
              && (posuser.getUpdateddateformat() == null)) {
            bw.write(aaaString);
            bw.write(EOL);
          } else if (posuser.getUpdatedBy() == null
                     && posuser.getUpdateddateformat() != null) {
            bw.write(bbbString);
            bw.write(EOL);
          } else if (posuser.getUpdatedBy() != null
                     && posuser.getUpdateddateformat() == null) {
            bw.write(cccString);
            bw.write(EOL);
          } else {
            bw.write(dddString);
            bw.write(EOL);
          }
        }
      }
    } catch (IOException, AnotherException e) {
      logger.error(e.getMessage());
    }
于 2013-08-16T15:08:14.020 に答える
1

java.nio私はパッケージをチェックアウトします。このSOの質問/回答の詳細は、詳細情報を参照してください。パフォーマンスが向上します。

大きなファイル サイズでの私の経験では、java.nio は java.io よりも高速です。しっかり速く。>250% の範囲のように。

于 2013-08-16T14:56:38.177 に答える