枚举 StorageSpeedUnit
enum StorageSpeedUnit { NUMERIC , STORAGE , SPEED ;
}
日志 Loggable
public static void logger ( String pattern, Object . . . paramArray) { String cls = MethodHandles . lookup ( ) . lookupClass ( ) . getName ( ) ; System. Logger logger = System . getLogger ( cls) ; String msg = String . format ( pattern, paramArray) ; logger. log ( System. Logger. Level . INFO , msg) ;
}
方法 formatStorageUnit
public static String formatStorageUnit ( final long storageByteSize, StorageSpeedUnit su) { if ( storageByteSize < 0 ) { return "0" ; } String [ ] unitArray = new String [ ] { } ; switch ( su) { case null -> { break ; } case NUMERIC -> { break ; } case STORAGE -> unitArray = new String [ ] { "B" , "KB" , "MB" , "GB" , "TB" } ; case SPEED -> unitArray = new String [ ] { "B/s" , "KB/s" , "MB/s" , "GB/s" , "TB/s" } ; default -> { break ; } } int digitGroup = ( int ) ( Math . log10 ( storageByteSize) / Math . log10 ( 1024 ) ) ; double number = storageByteSize / Math . pow ( 1024 , digitGroup) ; var formatter = new DecimalFormat ( "#,##0.##" ) ; if ( unitArray. length == 0 ) { return formatter. format ( number) ; } else { return formatter. format ( number) + " " + unitArray[ digitGroup] ; }
}
测试
public static void main ( String [ ] sa) { var formatSize = 10737418 ; var formatEmpty = formatStorageUnit ( formatSize, null ) ; var formatNumeric = formatStorageUnit ( formatSize, StorageSpeedUnit . NUMERIC ) ; var formatStorage = formatStorageUnit ( formatSize, StorageSpeedUnit . STORAGE ) ; var formatSpeed = formatStorageUnit ( formatSize, StorageSpeedUnit . SPEED ) ; var pattern = "empty:%s,numeric:%s,storage:%s,speed:%s" ; Loggable . logger ( pattern, formatEmpty, formatNumeric, formatStorage, formatSpeed) ;
}
5 月 13 , 2024 9 :16:38 下午 com.elf.core.logger.Loggable logger
信息: empty:10.24,numeric:10.24,storage:10.24 MB,speed:10.24 MB/s