- UUID Class
- Remarks
- Constructors
- Properties
- Methods
- Explicit Interface Implementations
- Extension Methods
- Руководство по UUID в Java
- 2. Класс UUID
- 3. Структура
- 3.1. Вариант UUID
- 3.2. UUID-версия
- 4. Версии UUID
- 4.1. Версия 1
- 4.2. Версия 2
- 4.3. Версии 3 и 5
- 4.4. Версия 4
- 5. Вывод
- Your Guide To UUID In Java
- Example UUID
- Java UUID class
- Static methods
- Instance methods
UUID Class
Some information relates to prerelease product that may be substantially modified before it’s released. Microsoft makes no warranties, express or implied, with respect to the information provided here.
A class that represents an immutable universally unique identifier (UUID).
[Android.Runtime.Register("java/util/UUID", DoNotGenerateAcw=true)] public sealed class UUID : Java.Lang.Object, IDisposable, Java.Interop.IJavaPeerable, Java.IO.ISerializable, Java.Lang.IComparable
[] type UUID = class inherit Object interface ISerializable interface IJavaObject interface IDisposable interface IJavaPeerable interface IComparable
Remarks
Portions of this page are modifications based on work created and shared by the Android Open Source Project and used according to terms described in the Creative Commons 2.5 Attribution License.
Constructors
Constructs a new UUID using the specified data.
Properties
Returns the runtime class of this Object .
The handle to the underlying Android instance.
Returns the least significant 64 bits of this UUID’s 128 bit value.
Returns the most significant 64 bits of this UUID’s 128 bit value.
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.
This API supports the Mono for Android infrastructure and is not intended to be used directly from your code.
Methods
The clock sequence value associated with this UUID.
Creates and returns a copy of this object.
Compares this UUID with the specified UUID.
Indicates whether some other object is «equal to» this one.
Creates a UUID from the string standard representation as described in the #toString method.
Returns a hash code value for the object.
Called by the garbage collector on an object when garbage collection determines that there are no more references to the object.
Static factory to retrieve a type 3 (name based) UUID based on the specified byte array.
The node value associated with this UUID.
Wakes up a single thread that is waiting on this object’s monitor.
Wakes up all threads that are waiting on this object’s monitor.
Static factory to retrieve a type 4 (pseudo randomly generated) UUID.
The timestamp value associated with this UUID.
Returns a string representation of the object.
The variant number associated with this UUID .
The version number associated with this UUID .
Causes the current thread to wait until another thread invokes the java.lang.Object#notify() method or the java.lang.Object#notifyAll() method for this object.
Causes the current thread to wait until either another thread invokes the java.lang.Object#notify() method or the java.lang.Object#notifyAll() method for this object, or a specified amount of time has elapsed.
Causes the current thread to wait until another thread invokes the java.lang.Object#notify() method or the java.lang.Object#notifyAll() method for this object, or some other thread interrupts the current thread, or a certain amount of real time has elapsed.
Explicit Interface Implementations
IComparable.CompareTo(Object) | |
IJavaPeerable.Disposed() | (Inherited from Object) |
IJavaPeerable.DisposeUnlessReferenced() | (Inherited from Object) |
IJavaPeerable.Finalized() | (Inherited from Object) |
IJavaPeerable.JniManagedPeerState | (Inherited from Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) | (Inherited from Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) | (Inherited from Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) | (Inherited from Object) |
Extension Methods
Performs an Android runtime-checked type conversion.
Руководство по UUID в Java
UUID (универсальный уникальный идентификатор), также известный как GUID (глобальный уникальный идентификатор), представляет собой 128-битное значение, уникальное для всех практических целей. Стандартное представление UUID использует шестнадцатеричные цифры (октеты):
123e4567-e89b-12d3-a456-556642440000
UUID состоит из шестнадцатеричных цифр (по 4 символа каждая) и 4 символов «-», что делает его длину равной 36 символам.
Nil UUID — это особая форма UUID, в которой все биты равны нулю.
В этом руководстве мы рассмотрим класс UUID в Java. Во-первых, мы увидим, как использовать сам класс. Затем мы рассмотрим различные типы UUID и способы их создания в Java.
2. Класс UUID
Класс UUID имеет единственный конструктор:
UUID uuid = new UUID(long mostSignificant64Bits, long leastSignificant64Bits);
Если мы хотим использовать этот конструктор, нам нужно предоставить два длинных значения. Однако это требует, чтобы мы сами создали битовый шаблон для UUID.
Для удобства существует три статических метода создания UUID.
Этот первый метод создает UUID версии 3 из заданного массива байтов:
UUID uuid = UUID.nameUUIDFromBytes(byte[] bytes);
Во-вторых, метод randomUUID() создает UUID версии 4. Это самый удобный способ создания UUID :
UUID uuid = UUID.randomUUID();
Третий статический метод возвращает объект UUID с учетом строкового представления данного UUID:
UUID uuid = UUID.fromString(String uuidHexDigitString);
Давайте теперь посмотрим, как устроен UUID.
3. Структура
123e4567-e89b-42d3-a456-556642440000 xxxxxxxx-xxxx-Bxxx-Axxx-xxxxxxxxxxxx
3.1. Вариант UUID
A представляет вариант, который определяет макет UUID. Все остальные биты в UUID зависят от установки битов в поле варианта. Вариант определяется тремя старшими битами A:
MSB1 MSB2 MSB3 0 X X reserved (0) 1 0 X current variant (2) 1 1 0 reserved for Microsoft (6) 1 1 1 reserved for future (7)
Значение A в упомянутом UUID равно «a». Двоичный эквивалент «a» (=10xx) показывает вариант как 2.
3.2. UUID-версия
B представляет версию. Версия в упомянутом UUID (значение B ) равна 4.
Java предоставляет методы для получения варианта и версии UUID: «
UUID uuid = UUID.randomUUID(); int variant = uuid.variant(); int version = uuid.version();
Это пять разных версий для варианта 2 UUID: на основе времени (UUIDv1), безопасности DCE (UUIDv2), на основе имени (UUIDv3 и UUIDv5) и случайного (UUIDv4).
Java предоставляет реализацию для v3 и v4, но также предоставляет конструктор для создания UUID любого типа:
UUID uuid = new UUID(long mostSigBits, long leastSigBits);
4. Версии UUID
4.1. Версия 1
UUID версии 1 основан на текущей метке времени, измеренной в единицах 100 наносекунд от 15 октября 1582 года, объединенной с MAC-адресом устройства, на котором создан UUID.
Если вас беспокоит конфиденциальность, UUID версии 1 можно также сгенерировать со случайным 48-битным числом вместо MAC-адреса. В этой статье мы рассмотрим эту альтернативу.
Во-первых, мы сгенерируем 64 младших и старших бита в виде длинных значений:
private static long get64LeastSignificantBitsForVersion1() Random random = new Random(); long random63BitLong = random.nextLong() & 0x3FFFFFFFFFFFFFFFL; long variant3BitFlag = 0x8000000000000000L; return random63BitLong + variant3BitFlag; > private static long get64MostSignificantBitsForVersion1() LocalDateTime start = LocalDateTime.of(1582, 10, 15, 0, 0, 0); Duration duration = Duration.between(start, LocalDateTime.now()); long seconds = duration.getSeconds(); long nanos = duration.getNano(); long timeForUuidIn100Nanos = seconds * 10000000 + nanos * 100; long least12SignificatBitOfTime = (timeForUuidIn100Nanos & 0x000000000000FFFFL) >> 4; long version = 1 <12; return (timeForUuidIn100Nanos & 0xFFFFFFFFFFFF0000L) + version + least12SignificatBitOfTime; >
Затем мы можем передать эти два значения конструктору UUID:
public static UUID generateType1UUID() long most64SigBits = get64MostSignificantBitsForVersion1(); long least64SigBits = get64LeastSignificantBitsForVersion1(); return new UUID(most64SigBits, least64SigBits); >
4.2. Версия 2
Версия 2 также основана на отметке времени и MAC-адресе. Однако в RFC 4122 не указаны точные детали генерации, поэтому в этой статье мы не будем рассматривать реализацию.
4.3. Версии 3 и 5
UUID генерируются с использованием хэша пространства имен и имени. Идентификаторы пространства имен — это UUID, такие как система доменных имен (DNS), идентификаторы объектов (OID), URL-адреса и т. д.
UUID = hash(NAMESPACE_IDENTIFIER + NAME)
Единственная разница между UUIDv3 и UUIDv5 заключается в алгоритме хэширования — v3 использует MD5 (128 бит), а v5 использует SHA-1 (160 бит).
Проще говоря, мы усекаем полученный хэш до 128 бит, а затем заменяем 4 бита на версию и 2 бита на вариант.
Давайте сгенерируем UUID типа 3:
byte[] nameSpaceBytes = bytesFromUUID(namespace); byte[] nameBytes = name.getBytes("UTF-8"); byte[] result = joinBytes(nameSpaceBytes, nameBytes); UUID uuid = UUID.nameUUIDFromBytes(result);
Здесь важно отметить, что шестнадцатеричная строка для пространства имен сначала должна быть преобразована в массив байтов.
Наконец, Java не предоставляет реализацию для типа 5. Проверьте наш репозиторий исходного кода на наличие UUIDv5.
4.4. Версия 4
Реализация UUIDv4 использует в качестве источника случайные числа. Реализация Java — SecureRandom , которая использует непредсказуемое значение в качестве начального значения для генерации случайных чисел, чтобы уменьшить вероятность коллизий.
Давайте сгенерируем UUID версии 4:
UUID uuid = UUID.randomUUID();
Давайте сгенерируем уникальный ключ, используя «SHA-256» и случайный UUID:
MessageDigest salt = MessageDigest.getInstance("SHA-256"); salt.update(UUID.randomUUID().toString().getBytes("UTF-8")); String digest = bytesToHex(salt.digest());
5. Вывод
В этой статье мы увидели, как устроен UUID и какие существуют варианты и версии.
Мы также узнали, для каких версий Java предоставляет готовую реализацию, и рассмотрели примеры кода для создания других версий.
И, как всегда, исходный код реализации доступен на GitHub .
Your Guide To UUID In Java
UUID, a universally unique identifier is a 128-bit number used to identify information in computer systems.
UUID is made of hex digits along with 4 hyphen (“-“) symbols. The length of a UUID is 36 characters.
There are 4 types of UUID
- Time-based UUID (Version 1)
- DCE Security UUID (Version 2)
- Name-based UUID (Version 3 and 5)
- Randomly Generated UUID (Version 4)
Mostly Randomly Generated UUID i.e. UUID Version 4 is used.
UUID Version 4 uses random numbers as a source. It uses an unpredictable value as the seed to generate random numbers to reduce the chance of collisions
There are 4 types of UUID variant
- 0: It is reserved for NCS backward compatibility
- 2: Leach-Salz
- 6: It is reserved for Microsoft backward compatibility
- 7: It is reserved for future definition.
Mostly the variant 2 is used.
UUID can be used in the following cases
- As a primary key of database table
- To create session id for web application
- To represent as transaction id
- To create a random file name
Example UUID
Java UUID class
UUID Class belongs to the java.util package. It represents an immutable universally unique identifier (UUID).
`[UUID](https://docs.oracle.com/javase/8/docs/api/java/util/UUID.html#UUID-long-long-)(long mostSigBits, long leastSigBits)`
Constructs a new UUID using the specified data.
Static methods
There are three static methods of a UUID class,
UUID.fromString(String name)
The above method creates a UUID from the string standard representation as described in the toString() method.
UUID.nameUUIDFromBytes(byte[] name)
This method is used to create a version 3 (name based) UUID based on the specified byte array.
This method is used to create a version 4 (pseudo randomly generated) UUID.
Instance methods
Also there are a few instance methods of a UUID class.
This method is used to get the the clock sequence value associated with this UUID.
This method returns the clock sequence value as int .
This method is used to compare this UUID with the specified UUID ( the one received as method param i.e. val
This method returns -1, 0 or 1 as this UUID is less than, equal to, or greater than val
This method simply compares this object to the specified object. It return the result in boolean
This method returns the node value ( long ) associated with this UUID.
This method returns the timestamp value ( long ) associated with this UUID.
This method returns a String object representing this UUID.
This method returns the variant number ( int ) associated with this UUID.
This method returns the version number ( int ) associated with this UUID.
You can visit my YouTube channel ‘coderolls’ to find more video tutorials.