41 votes

Existe-t-il un enum Java pour les unités de taille de fichier équivalent à java.util.concurrent.TimeUnit ?

J'ai toujours aimé la lisibilité des affectations qui utilisaient TimeUnit de cette manière :

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

Sur quelque chose comme :

long timePeriodInMillis = 53 * 60 * 1000;

Existe-t-il un enum équivalent que je puisse utiliser pour les unités de taille de fichier ? Quelque chose comme

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

17voto

Xavier Portebois Points 683

Apache commons fournit des constantes dans le fichier FileUtils comme

  • FileUtils.ONE_MB
  • FileUtils.ONE_GB
  • ...

source : https://commons.apache.org/proper/commons-io/javadocs/api-2.2/org/apache/commons/io/FileUtils.html

Leur définition d'un KB est basée sur 1024 octets, (un MB est KB², et ainsi de suite).

14voto

Fabian Barney Points 5707

J'ai fait exactement la même chose il y a six mois, juste pour m'amuser, en m'inspirant de l'enum TimeUnit.

Je le téléchargerai sur GitHub demain. Il contient deux enums : BitUnit y ByteUnit . Les deux permettent également la conversion entre les deux. ByteUnit prend en charge les préfixes à 2 bases ainsi que les préfixes à 10 bases. (Les constantes et méthodes de l'énumération dans ByteUnit utiliser la terminologie de la CEI 80000-13 pour les préfixes).

L'utilisation se présente comme suit :

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

... et l'imprime :

1953.125

1073.741824
1024.0
1000.0
953.67431640625

Pour les méthodes de conversion entre bits et octets, vous avez surchargé les méthodes pour spécifier une taille de mot autre que 8 bits par octet. J'espère que vous pouvez attendre jusqu'à demain.


EDIT

Nous y sommes : https://github.com/fabian-barney/Utils

Ne me blâmez pas pour la structure des répertoires - je ne suis pas encore familier avec Git :)

0voto

Andy Thomas Points 30979

Non, mais vous pouvez vous convertir facilement avec :

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

o

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

selon la définition que vous donnez d'un mégaoctet .

0voto

Anton Goncharov Points 313

Si vous utilisez Spring, il existe déjà une classe utilitaire pour la conversion des unités de données : org.springframework.util.unit.DataSize . Cette classe modélise la taille des données en termes d'octets ; elle est immuable et à l'abri des threads.

Exemple d'utilisation :

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

-4voto

TheCapn Points 2874

En consultant la documentation Java pour la fonction Comparable interface qui TimeUnit Il n'y a pas de tels outils. Voir ici : http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html

Grâce à ce lien, il ne devrait pas être difficile pour vous de dériver votre propre version de travail pour l'utiliser dans votre ou vos projets.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X