文件大小单元的Java枚举是否等同于java.util.concurrent.TimeUnit?

时间:2011-12-13 20:40:45

标签: java time enums filesize

我一直很喜欢使用TimeUnit的作业的可读性,如下所示:

long timePeriodInMillis = TimeUnit.MINUTES.toMillis( 53 );

类似于:

long timePeriodInMillis = 53 * 60 * 1000;

我可以用于文件大小单元的等效枚举吗?像

这样的东西
long maxBits = FilesizeUnit.MEGABYTES.toBits( 11 );

5 个答案:

答案 0 :(得分:12)

半年前我完成了这项工作,仅仅是为了获得TimeUnit enum的灵感。

明天我会把它上传到GitHub。它包含两个枚举:BitUnitByteUnit。两者都支持彼此之间的转换。 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

使用该链接,您可能不难获得自己的工作版本以在项目中使用。