수신 된 UDP 패킷을 파일에 저장하고 각 패킷의 수신 시간을 각 패킷과 함께 저장하는 응용 프로그램이 있습니다. 패킷을 수신 할 때 수신 시간을 얻으려면 System.currentTimeMillies()
을 사용하고 있습니다.자바에서 시스템의 시간과 무관 한 시계
나는이 파일을 UDP로 전송할 때마다 각 패킷을 저장 한 시간과 동기화하여 파일에서 각 패킷을 전송하기 때문에 시간을 저장할 필요가있다.
문제는 패킷을 받고 저장하는 동안 시스템 날짜와 시간을 변경하면 파일을 보내는 동안 동기화가 엉망이된다는 것입니다.
그래서 시스템 날짜 및 시간에 관계없이 수신 된 각 패킷에 타임 스탬프가 필요합니다. 송신하는 동안 수신하는 동안 시스템 날짜와 시간이 변경 되더라도 전송 속도는 동기화됩니다.
나는 이것들이 System.nanoTime()
으로 얻을 수 있다는 것을 알고 있지만, 이것을 사용해도 안전할까요? 나는 System.nanoTime()
가 다른 시스템 아키텍처와 운영체제에서 정확하지 않을 수도 있다고 생각한다.
System.nanoTime()
또한 프로그램을 실행하는 동안 마지막 값으로 끝내지 않으므로이 시계가 시작되는 방법 (초기 값)을 사용합니다. System.nanoTime()
시계에 대한 첫 번째 호출에서 0부터 시작하는 경우이 시계는 약 290 년 동안 실행되어 마지막 값으로 끝납니다.
System.nanoTime()
에 대한 대안이 있습니까? 밀리 초 단위로 시계의 정확성이 필요합니다.
다른 시스템에서 파일을 전송할 수 있기 때문에이 시계가 시스템과 독립적으로 실행되어야합니다. 또한 다른 시스템간에 절대로 여러 날이나 몇 달 동안 시간을 왜곡해서는 안됩니다.
감사
왜 당신이 당신의 UDP 패킷을 내 보낸 날짜를 넣어하지 않습니다 (이하 290년를 실행하여 시스템을 가정) 오버 플로우를 처리하려면
는, 임의의 시작 지점 및 저장의 차이를 사용할 수 있습니까? – Julien
UDP를 보내는 응용 프로그램이 제 권한을 가지고 있지 않습니다. 해당 응용 프로그램을 수정할 수 없습니다. – UDPLover