2011-12-13 8 views

Odpowiedz

9

Zrobiłem dokładnie coś takiego pół roku temu dla zabawy zainspirowanej przez enum TimeUnit.

Przesyłam go jutro na GitHub. Zawiera dwie wyrazy: BitUnit i ByteUnit. Obie także obsługują konwersję między sobą. ByteUnit ma wsparcie dla 2-prefiksów oraz 10-prefiksowych. (stałe. Enum i metody stosowania IEC 80000-13 ByteUnit terminologii dla przedrostków)

Wykorzystanie wygląda następująco:

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)); 

... i wypisuje:

1953.125 

1073.741824 
1024.0 
1000.0 
953.67431640625 

Dla przeliczaniem metody między bitami i bajtami, których przeciążono metody, aby określić rozmiar słowa inny niż 8 bitów na bajt. Mam nadzieję, że możesz poczekać do jutra.


EDIT

Tutaj jesteś: https://github.com/fabian-barney/Utils

nie wiń mnie za struktury katalogów - Wciąż nie jestem obeznanym z Git jeszcze. :)

+1

Udało ci się to wydać GitHubowi? –

+0

Właśnie założyłem konto. Daj mi sekundę, aby poprawnie zainstalować i skonfigurować eGit.Po raz pierwszy używam Gita - po prostu mam doświadczenie z svn i cvs. :) –

+0

Gotowy! Sry zajęło to tak długo! –

0

No, ale można z łatwością przekształcić się:

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

lub

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

zależności od definicji megabyte.

+0

Spowoduje to wykonanie arytmetyki liczb całkowitych i przepełnienie, jeśli przekroczy 1 gigabajt. Zaleciłbym, aby co najmniej jedna z tych stałych miała końcowe "L" lub rzutowanie. – Gray

+2

Oczywiście, ale jednoznaczne mnożenie jest tym, czego staram się uniknąć. –

+0

Dobra uwaga, poprawiona powyżej. Nie ma znaczenia z tymi stałymi, ale będzie powyżej 255 Mb. Wyraźne typy mogą teraz zapobiec problemom później. –

Powiązane problemy