2011-12-13 7 views
25

siempre me ha gustado la legibilidad de las asignaciones que utilizan TimeUnit así:¿Hay una enumeración de Java para unidades de tamaño de archivo que sea equivalente a java.util.concurrent.TimeUnit?

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

por algo como:

long timePeriodInMillis = 53 * 60 * 1000; 

¿Hay una enumeración equivalente puedo usar para las unidades de archivo tamaño? Algo así como

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

Respuesta

9

He hecho exactamente algo así hace medio año atrás solo por diversión, inspirado en TimeUnit enum.

Lo subiré a GitHub mañana. Contiene dos enumeraciones: BitUnit y ByteUnit. Ambos también admiten la conversión entre ellos. ByteUnit tiene soporte para Prefijos basados ​​en 2 así como para Prefijos basados ​​en 10. (. constantes y métodos de enumeración en ByteUnit uso IEC 80000-13 terminología para los prefijos)

uso es el siguiente:

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

... e imprime:

1953.125 

1073.741824 
1024.0 
1000.0 
953.67431640625 

Para la conversión métodos entre Bits y Bytes que ha sobrecargado métodos para especificar un tamaño de palabra distinto de 8 bits por byte. Espero que puedas esperar hasta mañana.


EDITAR

aquí están: https://github.com/fabian-barney/Utils

no me culpo por la estructura de directorios - Todavía no estoy familiarizado con Git todavía. :)

+1

¿Se las arregló para ponerlo en GitHub? –

+0

Acabo de crear una cuenta. Dame un segundo para instalar y configurar eGit correctamente.Es la primera vez que uso Git, simplemente tengo experiencia con svn y cvs. :) –

+0

¡Entendido! ¡Sry tomó tanto tiempo! –

0

No, pero se puede convertir fácilmente a sí mismo con:

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

o

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

dependiendo de la definición de un megabyte.

+0

Esto hará aritmética y desbordamiento enteros si es superior a 1 gigabyte. Recomiendo hacer que al menos una de esas constantes tenga una 'L' o un reparto. – Gray

+2

Claro, pero la multiplicación explícita es lo que estoy tratando de evitar. –

+0

Buen punto, arreglado arriba. No importa con estas constantes, pero sería superior a 255 Mb. Los tipos explícitos ahora podrían evitar problemas más adelante. –

-4

En cuanto a la documentación de Java para la interfaz Comparable que TimeUnit implementa no existe tal cosa. Vea aquí: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html

Sin embargo, con ese enlace no debería ser difícil para usted derivar su propia versión de trabajo para usar dentro de su (s) proyecto (s).

+0

¿Cómo se relaciona el 'Comparable' con la pregunta? –

Cuestiones relacionadas