上記の件について簡単な質問です。基本的に、私はネットワークからデータをキャプチャし、それをさらに処理するために外部ファイルに書き込むソフトウェアを作成しています。
私が知りたいのは、この望ましい効果を得るためにどのコードを使用するのが最適かということです。
御時間ありがとうございます
デビッド
上記の件について簡単な質問です。基本的に、私はネットワークからデータをキャプチャし、それをさらに処理するために外部ファイルに書き込むソフトウェアを作成しています。
私が知りたいのは、この望ましい効果を得るためにどのコードを使用するのが最適かということです。
御時間ありがとうございます
デビッド
フレームワークを使用できますExecutor
。実装例は次のとおりです。
final List<String> myData = new ArrayList<String>();
final File f = new File("some/file.txt");
final Runnable saveListToFileJob = new Runnable(){
@Override
public void run(){ /* this uses Guava */
try{
Files.write(
Joiner.on('\n').join(myData),
f, Charsets.UTF_8);
} catch(final IOException e){
throw new IllegalStateException(e);
}
}
};
Executors
.newScheduledThreadPool(1) /* one thread should be enough */
.scheduleAtFixedRate(saveListToFileJob,
1000 * 60 /* 1 minute initial delay */,
1, TimeUnit.MINUTES /* run once every minute */);
質問にはおそらくもう少し詳細が必要です。ソリューションのどの部分が問題を引き起こしていますか?
また、提供される可能性のあるソリューションに大きな影響を与える可能性があるため、問題のドメインをもう少し詳しく説明する必要があります。例えば:
私の側の最初の予感です。あなたが説明した問題の解決策を設計するときに、ある種の生産者と消費者のアプローチが必要になると思ういくつかの考えがあります。
私は完全に的外れかもしれませんが、あなたがネットワークから読んでいるという事実は、ある種の予測不可能性と信頼性を暗示しています。したがって、タイマーに頼る代わりに、データのプロデューサー (ネットワークから読み取ったオブジェクト) がコンシューマー (ネットワークから読み取ったデータを使用するオブジェクト) に信号を送って、データを処理することに依存します。