2017-11-10 4 views
0

を開催それはあまりにも高いようです。我々は書くたびに書き込み、ファイルが、ファイルを開いたり閉じたりのコストを読み取ることが考えられ、我々はデバイス内のいくつかのイベントへの参照を保持している文字列ビルダーを持っているために探している</p> <p>を静的にStringBuilder

問題は、我々だけで定義されたサイズ

public class DiagnosticUtil { 

private static final int DIAGNOSTIC_SIZE = 5000; 

public static StringBuilder DIAGNOSTICS_HOLDER = new StringBuilder(DIAGNOSTIC_SIZE); 

public static void addDiagnosticLine(String message){ 
    try { 
     //Limits the size of the diagnostics recolection removing the first 2000 characters 
     if (DiagnosticUtil.DIAGNOSTICS_HOLDER.length() > DIAGNOSTIC_SIZE - 300) { 
      DiagnosticUtil.DIAGNOSTICS_HOLDER.delete(0, DiagnosticUtil.DIAGNOSTICS_HOLDER.length() - 2000); 
     } 
     DIAGNOSTICS_HOLDER.append(TimeUtils.getCurrentDate()).append(message).append("\n"); 
    }catch (Exception e){ 
     Timber.d("Error saving additional data"); 
    } 

} 

}

質問があるのためのStringBuilderを維持しようとした場合でも、時には我々はStackOverflowの例外を取得している、これは良いアプローチであるということですか?または、このログを外部ファイルに保存する必要がありますか。

ありがとうございます!

+0

は 'StringBuilder'は、何でもへの参照を保持するだけで、イベントを聞かせていない悪い、手続き型コードでOOPない

public class DiagnosticUtil { private final static int threshold = 1000; private static List<String> messages = new ArrayList<>(); private static final File log = new File("path to your file"); public static void addDiagnosticLine(String message) { if (messages.size() > threshold) { try (BufferedWriter file = new BufferedWriter(new FileWriter(log))) { for (String msg : messages) { file.write(msg); } file.flush(); } catch (IOException e) { Timber.d("Error saving additional data " + e); } messages = new ArrayList<>(); } else { messages.add(TimeUtils.getCurrentDate() + message + "\n"); } } } 

注意を払う:あなたはこのようなコードの何かが必要。あなたは何らかのコレクションを探していますか? – EJP

答えて

0

StringBuilderを望ましいサイズで作成すると、StringBuilderの内部でStringを渡す前に、このサイズのStringBuilderでchar []配列が作成されているため、そこでデフォルトのコンストラクタを使用する必要があります。リストの代わりにBuilderを使用する理由は何ですか?私はすべての画像が表示されませんが、私はあなたが2つのアプローチ(メモリログとファイルログストア)で異なる何かを選択することを好むかもしれないと思うと思うメッセージの一定量を収集すると、単純にファイルに書き込み、すべてのメッセージのファイルシステムに触れ、その量のログデータをメモリに取り込まないようにします。これは、utilのクラスが

+0

偉大な答え!ありがとう –

関連する問題

 関連する問題