我想在客户端和服务器中使用Socket测量两部Android手机的传输时间,所以我认为最简单的方法是放
System.NanoTime()
从客户端发送后,从服务器接收后,然后减去它们以获得确切的时间。 但是我在每部手机上都有不同的时间,当减去它们时,我有一个奇怪的长号码(第一个小手机有xxxxxx E12,另一个小手机xxxxxx E13号码) 那么如何以可读格式获取数字,如果我使用不同类型的手机,会有不同的结果吗? 感谢
答案 0 :(得分:1)
根据我的理解,您只需要计算传输时间,这是请求 - 响应所花费的时间。
因此,在建立连接之前,您可以做的是调用currentTimeMillis()
而不是返回nano:
long sTime = System.currentTimeMillis();
然后在您得到回复后使用:
long fTime = System.currentTimeMillis();
long elapsedTime = fTime - sTime;
如何以可读格式获取数字?
DateFormat.getInstance().format(elapsedTime);
以上内容适用于System.NanoTime()
,无论您是想要使用nano还是milli,如果您想要进行极其精确的测量,并且对您而言比使用性能更重要纳米
当然,你必须记住,elapsedTime会随着时间的推移而变化,因为除了好的实现之外还有更多的东西,所以不要期望它是恒定的。
修改1:
我使用DateFormat和nanoTime因为我需要很短的时间,但我得到了 1970年1月1日凌晨3:28 !!我只需要(123455纳秒时间) 发送)
这就是为什么我在我的示例中使用System.currentTimeMillis
作为纳秒时间形式将是10 ^ -9秒,以获得更大的粒度使用System.currentTimeMillis()
或者你可以只需使用以下命令将nano转换为秒:
TimeUnit.SECONDS.convert(elapsedTime, TimeUnit.NANOSECONDS);
如果您不想使用TimeUnit
,只需将您获得的数字除以1000000000
。