Java.util.UUID.randomUUID(). toString() length
Используется ли длина java.util.UUID.randomUUID(). toString() всегда равная 36?
Я не смог найти информацию об этом. Здесь сказано только следующее:
общедоступный статический UUID randomUUID() Статический factory для получения UUID типа 4 (псевдослучайно сгенерированный). UUID генерируется с использованием криптографически сильного генератора псевдослучайных чисел. Возвращает: Случайно сгенерированный UUID
И что type 4
ничего мне не говорит. Я не знаю, что означает тип 4 в этом случае.
Ответы
Ответ 1
Всегда ли java.util.UUID.randomUUID(). ToString() длина равна 36?
Да!! это.
UUID
самом деле 128-битное значение (2 длинные). Чтобы представить 128 бит в шестнадцатеричную строку, будет 128/4 128/4=32
символа (каждый символ имеет длину 4 бита). В строковом формате он также содержит 4 (-
), поэтому длина равна 36.
пример: 54947df8-0e9e-4471-a2f9-9af509fb5889
32 шестнадцатеричных символа + 4 символа дефиса = 36 символов Так что длина будет всегда одинаковой.
Обновить:
Я не знаю, что означает тип 4 в корпусе.
К вашему сведению: есть несколько способов генерации UUID. Здесь тип 4 означает, что этот uuid генерируется с использованием случайного или псевдослучайного числа. Из вики - Universally_unique_identifier # Версии:
Версии
Для обоих вариантов 1 и 2 в стандартах определены пять "версий", и каждая версия может быть более подходящей, чем другие, в конкретных случаях использования. Версия обозначается буквой М в строковом представлении.
UUID версии 1 генерируются из времени и идентификатора узла (обычно это MAC-адрес);
UUID версии 2 генерируются из идентификатора (обычно группы или идентификатора пользователя), времени и идентификатора узла;
версии 3 и 5 создают детерминированные UUID, сгенерированные хэшированием идентификатора и имени пространства имен;
и UUID версии 4 генерируются с использованием случайного или псевдослучайного числа.
Ответ 2
Вы можете преобразовать 16-байтовый UUIDv4 двоичный файл в 24-байтовый ascii, используя base64, вместо этого кодировать в ascii-hex (32 байта)
Ответ 3
Для таких, как я, которые начинают гуглить, прежде чем читать Javadoc, здесь Javadoc;)
UUID.toString
Для тех, кто не знает, как читать грамматическое дерево, читайте снизу вверх.
hexDigit - это один символ
hexOctet равен 2 hexDigits = 2 символа
узел 6 * hexOctet = 6 * 2hexdigit = 6 * 2 символа = 12 символов
вариант _and_sequence: 2 * hexOctet = 2 * 2hexdigit = 2 * 2 символа = 4 символа
time_high_and_version - 2 * hexOctet = 2 * 2hexdigit = 2 * 2 символа = 4 символа
time_mid равно 2 * hexOctet = 2 * 2hexdigit = 2 * 2 символа = 4 символа
time_low - 4 * hexOctet = 4 * 2hexdigit = 4 * 2 символа = 8 символов
и наконец, UUID является <time_low> "-" <time_mid> "-" <time_high_and_version> "-" <variable_and_sequence> "-" <узел>
= 8 символов + 1 символ + 4 символа + 1 символ + 4 символа + 1 символ + 4 символа + 1 символ + 12 символов
= 36 символов! 128 бит данных + 4 дефиса, как указано ранее
The UUID string representation is as described by this BNF:
UUID = <time_low> "-" <time_mid> "-"
<time_high_and_version> "-"
<variant_and_sequence> "-"
<node>
time_low = 4*<hexOctet>
time_mid = 2*<hexOctet>
time_high_and_version = 2*<hexOctet>
variant_and_sequence = 2*<hexOctet>
node = 6*<hexOctet>
hexOctet = <hexDigit><hexDigit>
hexDigit =
"0" | "1" | "2" | "3" | "4" | "5" | "6" | "7" | "8" | "9"
| "a" | "b" | "c" | "d" | "e" | "f"
| "A" | "B" | "C" | "D" | "E" | "F"