Статьи

Java UUID

Вступление:

UUID (универсальный уникальный идентификатор) представляет уникальное значение длиной 128 бит . Он также широко известен как GUID (глобальный уникальный идентификатор).

Стандартное представление UUID состоит из шестнадцатеричных цифр:

1
533a4559-e55c-18b3-8456-555563322002

И имеет 36 символов, которые включают четыре дефиса ‘-‘ .

Класс java.util.UUID в Java представляет неизменный UUID.

Мы можем использовать класс UUID для генерации случайного имени файла, сеанса или идентификатора транзакции. Другое популярное использование UUID для генерации значений первичного ключа в базе данных.

Класс Java UUID имеет метод для управления вариантом Лича-Зальца (вариант 2) . Однако его конструктор позволяет генерировать UUID любого типа:

1
new UUID(long mostSigBits, long leastSigBits)

Версии и варианты UUID :

Вариант определяет расположение UUID . Давайте возьмем пример UUID :

1
2
533a4559-e55c-18b3-8456-555563322002
xxxxxxxx-xxxx-Bxxx-Axxx-xxxxxxxxxxxx

Здесь значение A представляет вариант и определяется его первыми тремя MSB (наиболее значимыми битами):

MSB1 MSB2 MSB3 Вариант Описание варианта
0 Икс Икс 0 Зарезервировано для обратной совместимости NCS
1 0 Икс 2 Лич-Зальц
1 1 0 6 Зарезервировано, Microsoft Corporation обратная совместимость
1 1 7 Зарезервировано для будущего определения

Для нас A = 8 (1000) , поэтому первые три MSB равны 100 . Это означает, что наш UUID имеет вариант 2 .

Для варианта 2 UUID существует пять разных версий:

Версия Описание
v1 повременной
v2 DCE- Безопасность
v3 и v5 основанный на имени
v4 Случайно сгенерированный UUID

Генерация UUID :

Давайте рассмотрим методы в классе UUID Java, которые мы можем использовать для генерации UUID :

1. randomUUID ():

Он генерирует псевдослучайный UUID v4, используя криптографически сильный генератор псевдослучайных чисел:

1
UUID uuid = UUID.randomUUID();

2. nameUUIDFromBytes ():

Мы можем сгенерировать UUID из байтового массива, используя nameUUIDFromBytes () :

1
2
byte[] byteArr = {11, 23, 33};
UUID uuid = UUID.nameUUIDFromBytes(byteArr);

Этот метод генерирует UUID v3 (на основе имени).

3. fromString ():

С помощью fromString () мы можем создать UUID из стандартного строкового представления:

1
UUID uuid = UUID.fromString("533a4559-e55c-18b3-2456-555563322002");

Он выдаст исключение IllegalArgumentException для любой неверной строки, переданной в качестве аргумента.

Сравнение двух UUID :

Класс Java UUID реализует Сопоставимый интерфейс. Итак, мы можем использовать метод compareTo () для их сравнения:

1
2
3
4
UUID uuid1 = UUID.randomUUID();
UUID uuid2 = UUID.randomUUID();
  
int result = uuid1.compareTo(uuid2);

Как мы знаем, метод compareTo () возвращает:

  • 1: если uuid1 больше, чем uuid2
  • 0: если uuid1 = uuid2
  • -1: если uuid1 меньше, чем uuid2

При желании мы также можем использовать метод equals () для сравнения.

Другие методы:

Давайте рассмотрим несколько других методов класса Java UUID :

1. getLeastSignificantBits () и getMostSignificantBits ():

Как следует из названия, getLeastSignificantBits () и getMostSignificantBits () возвращают 64 младших и 64 старших значащих бита соответственно :

1
2
3
4
UUID uuid = UUID.randomUUID();
  
long leastSignificantBits = uuid.getLeastSignificantBits();
long mostSignificantBits = uuid.getMostSignificantBits();

Оба эти метода возвращают длинное значение.

2. вариант () и версия ():

Мы также можем запросить вариант и версию UUID:

1
2
3
4
UUID uuid = UUID.randomUUID();
  
int variant = uuid.variant();
int version = uuid.version();

Работа с UUID на основе времени (v1) :

Давайте начнем с добавления зависимости к javauuid -generator в нашем POM :

1
2
3
4
5
<dependency>
    <groupId>com.fasterxml.uuid</groupId>
    <artifactId>java-uuid-generator</artifactId>
    <version>3.1.5</version>
</dependency>

Обратите внимание, что эта библиотека предоставляет различные типы генераторов UUID.

Чтобы создать основанный на времени UUID , у нас будет:

1
UUID uuid = Generators.timeBasedGenerator().generate();

Другие методы из пакета java.util , которые пригодятся при работе с UUID v1, включают:

1. timestamp (): возвращает значение метки времени, связанное с данным UUID v1 . Этот метод генерирует исключение UnsupportedOperationException при использовании с любыми другими типами UUID .

2. clockSequence (): возвращает 14-битное значение, построенное из поля тактовой последовательности данного UUID . Также будет выброшено исключение UnsupportedOperationException для UUID, отличных от типа v1 .

Вывод:

В этом уроке мы узнали, что такое UUID и его варианты. Мы говорили о разных доступных версиях для варианта типа 2 . Мы также рассмотрели множество методов, предоставляемых классом Java UUID .

Опубликовано на Java Code Geeks с разрешения Шубхры Шриваставы, партнера нашей программы JCG . Смотреть оригинальную статью здесь: Java UUID

Мнения, высказанные участниками Java Code Geeks, являются их собственными.