2011-12-13 62 views

回答

9

半年前,我已经完全像这样做了,只是为了获得TimeUnit枚举的启发。

明天我会上传到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 

对于皈依你已经重载了位和字节之间的方法来指定字节大小,而不是每字节8位。希望你可以等到明天。


编辑

给你:https://github.com/fabian-barney/Utils

不要怪我的目录结构 - 我仍然不familar使用Git呢。 :)

0

没有,但你可以很容易地转换自己:根据您的一个megabyte的定义

long maxBits = 11L * 1024 * 1024 * 8; 

long maxBits = 11L * 1000 * 1000 * 8; 

+0

这将做整数算术和溢出,如果高于1千兆字节。我建议让这些常量中至少有一个具有尾部“L”或演员阵容。 – Gray 2011-12-13 22:20:38

+2

当然,但明确的乘法是我试图避免的。 – 2011-12-13 22:58:08

+0

好点,固定在上面。与这些常量无关,但会高于255 Mb。明确的类型现在可以在以后避免麻烦。 – 2011-12-13 22:58:23