1

上記の件について簡単な質問です。基本的に、私はネットワークからデータをキャプチャし、それをさらに処理するために外部ファイルに書き込むソフトウェアを作成しています。

私が知りたいのは、この望ましい効果を得るためにどのコードを使用するのが最適かということです。

御時間ありがとうございます

デビッド

4

3 に答える 3

6

私はおそらくTimerTaskを使用してそれを実装するでしょう。例えば、

int hour = 1000*60*60;
int delay = 0;
Timer t = new Timer();

t.scheduleAtFixedRate(new TimerTask() {
    public void run() {
        // Write to disk ...
    }
}, delay, hour);

それ以外の場合、クォートは、より高度なスケジューリングのニーズを処理できる強力なJavaスケジューラです。

于 2011-02-18T10:00:37.473 に答える
4

フレームワークを使用できます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 */);
于 2011-02-18T10:08:24.280 に答える
0

質問にはおそらくもう少し詳細が必要です。ソリューションのどの部分が問題を引き起こしていますか?

  • スケジューリング?
  • ネットワークからの読み取り?
  • メモリデータ構造の永続性?
  • ファイルへの書き込み?

また、提供される可能性のあるソリューションに大きな影響を与える可能性があるため、問題のドメインをもう少し詳しく説明する必要があります。例えば:

  • ネットワーク上を移動するデータの性質は何ですか?
  • 分単位である必要はありますか?ネットワークが送信を完了しておらず、時間が経過したときに読み始めたらどうなりますか?
  • ArrayList には正確に何が含まれていますか?
  • ファイル出力について説明できますか? (テキストファイル?シリアライズされたオブジェクト?など...)

私の側の最初の予感です。あなたが説明した問題の解決策を設計するときに、ある種の生産者と消費者のアプローチが必要になると思ういくつかの考えがあります。

  • ネットワークから継続的に読み取り、データを組み立て、同期キューに配置することだけを担当する Runnable/Thread オブジェクト。
  • 同期されたキューを監視する wait() 状態の Runnable/Thread オブジェクト。キューによって通知されると、ファイルへの永続化のためにキューの内容の読み取りを開始します。
  • キューにアイテムがある場合 (または特定のしきい値に達した場合) は、待機中のキュー リーダーに notify() して、永続化のためにキューからオブジェクトの消費を開始します。

私は完全に的外れかもしれませんが、あなたがネットワークから読んでいるという事実は、ある種の予測不可能性と信頼性を暗示しています。したがって、タイマーに頼る代わりに、データのプロデューサー (ネットワークから読み取ったオブジェクト) がコンシューマー (ネットワークから読み取ったデータを使用するオブジェクト) に信号を送って、データを処理することに依存します。

于 2011-02-18T10:24:38.960 に答える