UUID в JVM
#
Васильев Андрей Михайлович, 2024
Версии презентации
UUID
#
Universally Unique Identifier, универсально уникальный идентификатор, —
128-битная метка
- Если пользоваться установленным правилам создания, то UUID будут уникальны в
распределённых системах для решения практических задач
- Уникальность достигается алгоритмом генерации, который не включает общение с
центральным брокером
- Широко применяется в современных информационных системах
Существует несколько RFC, фиксирующих правила генерации и обработки этих данных,
последний был опубликован в 2024 году
Текстовое представление
#
В каноническом представлении UUID изображают в виде числа в шестнадцатеричной
системе счисления, разделённого дефисами на пять групп в формате 8-4-4-4-12.
Такое представление занимает 36 символов:
123e4567-e89b-12d3-a456-426655440000
xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx
4 бита M обозначают версию («version») UUID, а 1-3 старших бита N обозначают
вариант («variant») UUID
Общее количество уникальных ключей UUID (без учёта версий) составляет
- 2 в 128 степени
- Либо 256 в 16 степени
- Примерно 3.4 на 10 в 38 степени
Это означает, что генерируя 1 триллион ключей каждую наносекунду, перебрать все
возможные значения удастся лишь за 10 миллиардов лет
java.util.UUID
#
Начиная с версии 1.5 Java предоставляется класс java.util.UUID
Для создания объекта UUID можно воспользоваться:
- Конструктором, который ожидает два базовых числа, использующиеся при
формировании UUID
- Статической функцией
randomUUID()
для получения случайного значения, что
соответствует 4-й версии UUID
- Статической фукнцией
nameUUIDFromBytes()
для получения 3-й версии UUID из
набора байт
- Статической функцией
fromString()
для получения UUID из строкового
представления. В случае проблемы с форматом будет выброшено исключение
IllegalArgumentException
Объекты класса являются неизменяемыми
Для преобразования к строковому представлению можно воспользоваться стандартной
функцией toString()