前言
StopWatch 的 prettyPrint 方法可以输出任务执行的统计信息,但是默认的时间单位是到纳秒的,可读性不是很好,
可以重写 StopWatch 的 prettyPrint 方法,使其展示的时间单位为秒,同时调整百分百的格式,保留两位小数,效果如下:
实现方法
增加一个工具方法,传入 StopWatch 对象,具体代码如下:
private String prettyPrintBySecond(StopWatch stopWatch) {
StopWatch.TaskInfo[] taskInfos = stopWatch.getTaskInfo();
StringBuilder sb = new StringBuilder();
sb.append('\n');
sb.append("StopWatch '").append(stopWatch.getId()).append("': running time = ").append(stopWatch.getTotalTimeSeconds()).append(" s");
sb.append('\n');
if (taskInfos.length < 1) {
sb.append("No task info kept");
} else {
sb.append("---------------------------------------------\n");
sb.append("s % Task name\n");
sb.append("---------------------------------------------\n");
NumberFormat nf = NumberFormat.getNumberInstance();
nf.setMinimumFractionDigits(3);
nf.setGroupingUsed(false);
NumberFormat pf = NumberFormat.getPercentInstance();
pf.setMinimumIntegerDigits(2);
pf.setMinimumFractionDigits(2);
pf.setGroupingUsed(false);
for (StopWatch.TaskInfo task : taskInfos) {
sb.append(nf.format(task.getTimeSeconds())).append(" ");
sb.append(pf.format((double) task.getTimeNanos() / stopWatch.getTotalTimeNanos())).append(" ");
sb.append(task.getTaskName()).append("\n");
}
}
return sb.toString();
}
其它
NumberFormat
方法的一些说明:
setMinimumFractionDigits
设置小数的最小位数,不足则在后面补零
setMinimumIntegerDigits
设置整数的最小位数,不在则在签名补零