我一直很喜欢使用TimeUnit的作业的可读性,如下所示:
long timePeriodInMillis = TimeUnit.MINUTES.toMillis( 53 );
类似于:
long timePeriodInMillis = 53 * 60 * 1000;
我可以用于文件大小单元的等效枚举吗?像
这样的东西long maxBits = FilesizeUnit.MEGABYTES.toBits( 11 );
答案 0 :(得分:12)
半年前我完成了这项工作,仅仅是为了获得TimeUnit enum的灵感。
明天我会把它上传到GitHub。它包含两个枚举:BitUnit
和ByteUnit
。两者都支持彼此之间的转换。 ByteUnit支持基于2的前缀以及基于10的前缀。 (ByteUnit
中的枚举常量和方法使用IEC 80000-13术语作为前缀。)
用法如下:
System.out.println(BitUnit.KBIT.toKiB(16000));
System.out.println(ByteUnit.GIB.toMB(1));
System.out.println(ByteUnit.GIB.toMiB(1));
System.out.println(ByteUnit.GB.toMB(1));
System.out.println(ByteUnit.GB.toMiB(1));
...并打印出来:
1953.125
1073.741824
1024.0
1000.0
953.67431640625
对于Bits和Bytes之间的转换方法,您重载方法以指定除每字节8位以外的字大小。 希望你能等到明天。
修改强>
你在这里:https://github.com/fabian-barney/Utils
不要责怪我的目录结构 - 我还不熟悉Git。 :)
答案 1 :(得分:5)
Apache commons在FileUtils
类中提供常量,例如
FileUtils.ONE_MB
FileUtils.ONE_GB
源:https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/FileUtils.html
他们对KB的定义基于1024个字节(MB为KB²,如此长)。
答案 2 :(得分:0)
不,但您可以通过以下方式轻松转换自己:
long maxBits = 11L * 1024 * 1024 * 8;
或
long maxBits = 11L * 1000 * 1000 * 8;
取决于您对megabyte的定义。
答案 3 :(得分:0)
如果您使用的是 Spring,那么已经有一个用于数据单位转换的实用程序类:org.springframework.util.unit.DataSize
。
此类以字节为单位对数据大小进行建模,并且是不可变的和线程安全的。
使用示例:
Long bytesIn5Mb = DataSize.ofMegabytes(5).toBytes(); // 5MB to bytes
Long kbIn1Tb = DataSize.ofTerabytes(1).toKilobytes(); // 1TB to KB
答案 4 :(得分:-4)
查看Comparable
实现的TimeUnit
接口的Java文档,没有这样的东西。见这里:http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html
使用该链接,您可能不难获得自己的工作版本以在项目中使用。