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

Joe*_*erg 35 java time enums filesize

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

long timePeriodInMillis = TimeUnit.MINUTES.toMillis( 53 );
Run Code Online (Sandbox Code Playgroud)

比如:

long timePeriodInMillis = 53 * 60 * 1000;
Run Code Online (Sandbox Code Playgroud)

是否有可用于文件大小单元的等效枚举?就像是

long maxBits = FilesizeUnit.MEGABYTES.toBits( 11 );
Run Code Online (Sandbox Code Playgroud)

Fab*_*ney 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));
Run Code Online (Sandbox Code Playgroud)

...并打印出来:

1953.125

1073.741824
1024.0
1000.0
953.67431640625
Run Code Online (Sandbox Code Playgroud)

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


编辑

您的位置是:https://github.com/fabian-barney/Utils

不要责怪我的目录结构 - 我还不熟悉Git.:)


Xav*_*ois 7

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²,如此长)。


小智 6

如果您使用 Spring,则已经有一个用于数据单位转换的实用程序类:org.springframework.util.unit.DataSize。此类以字节为单位建模数据大小,并且是不可变的且线程安全的。

使用示例:

Long bytesIn5Mb = DataSize.ofMegabytes(5).toBytes(); // 5MB to bytes
Long kbIn1Tb = DataSize.ofTerabytes(1).toKilobytes(); // 1TB to KB
Run Code Online (Sandbox Code Playgroud)