java.util.UUID.randomUUID().toString() длина
Всегда ли java.util.UUID.randomUUID(). ToString() длина равна 36?
Я не смог найти информацию об этом. Здесь сказано только следующее:
public static UUID randomUUID () Статическая фабрика для получения UUID типа 4 (псевдослучайно сгенерированного). UUID генерируется с использованием криптографически сильного генератора псевдослучайных чисел. Возвращает: случайно сгенерированный UUID
И это type 4
ничего не говорит мне Я не знаю, что означает тип 4 в этом случае.
1 ответ
Всегда ли java.util.UUID.randomUUID(). ToString() длина равна 36?
Да!! это.
UUID
на самом деле 128-битное значение (2 длинные). Для представления 128 бит в шестнадцатеричную строку будет 128/4=32
символ (каждый символ длиной 4 бита). В строковом формате он также содержит 4 (-
) вот почему длина составляет 36.
пример: 54947df8-0e9e-4471-a2f9-9af509fb5889
32 шестнадцатеричных символа + 4 символа дефиса = 36 символов Так что длина будет всегда одинаковой.
Обновить:
Я не знаю, что означает тип 4 в корпусе.
К вашему сведению: есть несколько способов генерации UUID. Здесь тип 4 означает, что этот uuid генерируется с использованием случайного или псевдослучайного числа. Из вики - https://en.wikipedia.org/wiki/Universally_unique_identifier:
Версии
Для обоих вариантов 1 и 2 в стандартах определены пять "версий", и каждая версия может быть более подходящей, чем другие, в конкретных случаях использования. Версия обозначается буквой М в строковом представлении.
UUIDверсии 1 генерируются из времени и идентификатора узла (обычно это MAC-адрес);
UUIDверсии 2 генерируются из идентификатора (обычно группы или идентификатора пользователя), времени и идентификатора узла;
версии 3 и 5 создают детерминированные UUID, генерируемые хэшированием идентификатора и имени пространства имен;
и UUID версии 4 генерируются с использованием случайного или псевдослучайного числа.
Вы можете конвертировать UUIDv4 16-байтовый двоичный файл в 24-байтовый ascii, используя base64, вместо этого кодировать в ascii-hex (32 байта)
Для таких, как я, которые начинают гуглить, прежде чем читать Javadoc, здесь Javadoc;)
Для тех, кто не знает, как читать грамматическое дерево, читайте снизу вверх.
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 является
= 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"