【发布时间】:2013-09-07 11:06:58
【问题描述】:
我有将接收到的 UDP 数据包存储在文件中的应用程序,并将每个数据包的接收时间与每个数据包一起存储。我正在使用System.currentTimeMillies() 来获取接收数据包的接收时间。
我需要存储时间,所以当我在 UDP 上传输这个文件时,我会从文件中传输每个数据包,与每个数据包存储的时间同步。
问题是,如果我在接收和存储数据包时更改系统日期和时间,发送文件时的同步就会混乱。
所以我需要为每个接收到的数据包加上时间戳,与系统日期和时间无关。这样在发送时,即使接收时更改了系统日期和时间,发送速率也会同步。
我知道这些可以通过System.nanoTime() 实现,但是使用它安全吗?我认为System.nanoTime() 在不同的系统架构和操作系统上可能并不准确。
另外,如果我使用System.nanoTime(),这个时钟将如何开始(初始值),因为我不希望它在程序运行时以最后一个值结束。如果从第一次调用System.nanoTime() 开始,时钟从 0 开始,这个时钟可以运行大约 290 年,然后以最后一个值结束。
System.nanoTime() 有什么替代品吗?我需要以毫秒为单位的时钟精度。
我还需要这个时钟独立于系统运行,因为我可能正在从其他机器传输文件。此外,它不应该将时间扭曲数天或数月,永远不要在不同的系统之间。
谢谢
【问题讨论】:
-
为什么不把发送日期放在你的UDP数据包里?
-
发送 UDP 的应用程序不在我的控制范围内。我无法修改该应用程序。