是否有相当于 java.util.concurrent.TimeUnit 的文件大小单位的 Java 枚举?

2022-09-01 01:10:36

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

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

在类似这样的事情上:

long timePeriodInMillis = 53 * 60 * 1000;

是否有可用于文件大小单位的等效枚举?类似的东西

long maxBits = FilesizeUnit.MEGABYTES.toBits( 11 );

答案 1

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

半年前,我已经完成了这样的工作,只是为了受TimeUnit枚举启发的乐趣。

我明天会把它上传到GitHub上。它包含两个枚举:和 。两者还支持彼此之间的转换。ByteUnit 支持基于 2 的前缀以及基于 10 的前缀。(枚举常量和方法使用 IEC 80000-13 术语作为前缀。BitUnitByteUnitByteUnit

用法如下所示:

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

对于位和字节之间的转换方法,您已经重载了方法以指定除每字节 8 位以外的字大小。希望你能等到明天。


编辑

你在这里: https://github.com/fabian-barney/Utils

不要责怪我的目录结构 - 我仍然不熟悉Git。:)


推荐