我正在使用guava中的Stopwatch
类,它以微秒为单位返回经过的时间,如下所示:
long handledDuration = handleMessageWatch.elapsed(TimeUnit.MICROSECONDS);
我现在要做的是记录形成的经过时间,例如" mmmm.MMM" (m = millis,M = micros)作为某个json对象的一部分
{
"handledPayloadId":"RQ6fa00a1f-a02d-45bd-b13e-2d9f65af4882",
"handledDuration":1.430 // duration in milliseconds (1 ms and 430 micros)
}
或
{
"handledPayloadId":"RQ6fa00a1f-a02d-45bd-b13e-2d9f65af4882",
"handledDuration":1200.430 // duration in milliseconds (1200 ms and 430 micros)
}
使用guavas秒表和Google Gson序列化程序有效实现什么?
我是否需要先通过DecimalFormat
课程进行转换?
答案 0 :(得分:1)
什么是有效的实施
如果你想要它真正有效,那么你需要为存储你long handledDuration
的每个类编写一个Gson适配器,这样它的处理方式就与“普通”long不同。这是可能的,而且这可能是一场灾难,因为它太混乱了。
可能会有一个注释@GsonSerializeAsLeozillaWants
,它会在Gson注册并专门处理long
,但AFAIK你必须自己实现这个功能。
你可以为它编写一个类DurationMillisAndMicros
和一个适配器,这应该很简单,除了使用一个对象代替一个原始的快速。 DecimalFormat
,String.format
或通过/1000
和%1000
进行人工转换是您遇到的最少问题。
或者你可以简单地忘记它,或者甚至在每个持续时间使用nanos(与System.nanoTime
一致)并让它成为。这就是我可能会做的。