Вступление:
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, являются их собственными. |