受信したUDPパケットをファイルに保存し、各パケットの受信時間を各パケットとともに保存するアプリケーションがあります。System.currentTimeMillies()
パケットが受信されたときに受信時間を取得するために使用しています。
時間を保存する必要があるため、UDP でこのファイルを送信するときに、ファイルから各パケットを送信し、各パケットに保存されている時間と同期します。
問題は、パケットの受信と保存中にシステムの日付と時刻を変更すると、ファイルの送信中に同期がめちゃくちゃになることです。
したがって、システムの日付と時刻に関係なく、受信した各パケットにタイムスタンプを付ける必要があります。そのため、受信中にシステムの日付と時刻が変更された場合でも、送信中に送信レートが同期されます。
これらは で実現できることはわかっていますがSystem.nanoTime()
、これを使用しても安全ですか? System.nanoTime()
異なるシステム アーキテクチャやオペレーティング システムでは正確ではない可能性があると思います。
また、System.nanoTime()
プログラムの実行中に最後の値で終了したくないため、このクロックの開始方法(初期値)を使用する場合。クロックへの最初の呼び出しがSystem.nanoTime()
0 から始まる場合、このクロックは最後の値で終了するまで約 290 年間実行できます。
に代わるものはありますSystem.nanoTime()
か?ミリ秒単位の時計の精度が必要です。
また、他のマシンからファイルを送信している可能性があるため、このクロックはシステムから独立して実行する必要があります。また、異なるシステム間で、何日も何ヶ月も時間を歪めるべきではありません。
ありがとう