Подтвердить что ты не робот

Есть ли перечисление Java для единиц размера, эквивалентное java.util.concurrent.TimeUnit?

Мне всегда нравилась читаемость заданий, которые использовали TimeUnit так:

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

Над чем-то вроде:

long timePeriodInMillis = 53 * 60 * 1000;

Есть ли эквивалентное перечисление, которое я могу использовать для единиц размера? Что-то вроде

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

Ответ 1

Я сделал точно так, как это было полгода назад, просто для удовольствия, вдохновленного тайм-аутом TimeUnit.

Я загружу его завтра в GitHub. Он содержит два перечисления: BitUnit и ByteUnit. Оба они также поддерживают преобразование между собой. ByteUnit имеет поддержку префиксов на основе 2, а также для префиксов на основе 10. (Константы и методы enum в 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

Не обвиняйте меня в структуре каталогов - пока я еще не знаком с Git.:)

Ответ 2

Нет, но вы можете легко преобразовать себя:

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

или

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

в зависимости от вашего определения megabyte.

Ответ 3

Глядя на документацию по Java для интерфейса Comparable, который реализует TimeUnit, нет такой вещи. См. Здесь: http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Comparable.html

С этой ссылкой, однако, вам не составит труда вывести свою рабочую версию для использования в ваших проектах.