Uuid java default value

Руководство по 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 .

Источник

Uuid java default value

Overview of the UUID data type

A universally unique identifier (UUID) is a 128-bit number used to identify information in computer systems. You can create a UUID and use it to uniquely identify something. In its canonical textual representation, the 16 octets of a UUID are represented as 32 hexadecimal (base-16) digits, displayed in five groups separated by hyphens, in the form 8-4-4-4-12 for a total of 36 characters (32 hexadecimal characters and 4 hyphens). For example, a81bc81b-dead-4e5d-abff-90865d1e13b1 .

In Oracle NoSQL, UUID values are represented by the UUID data type. The UUID data type is considered a subtype of the STRING data type, because UUID values are displayed in their canonical textual format and, in general, behave the same as string values in the various SQL operators and expressions. However, in order to save disk space, the UUID value is saved in a compact format on disk. If the UUID value is the primary key, the canonical 36-byte string is converted to a 19-byte string, then is saved on disk. If the UUID value is a non-primary key, the canonical 36-byte string is converted to a 16-byte array, then is saved on disk.

A table column can be declared as having UUID type in a CREATE TABLE statement. The UUID data type is best-suited in situations where you need a globally unique identifier for the records in a table that span multiple regions since identity columns are only guaranteed to be unique within a NoSQL cluster in a region.

Declare a column with UUID data type. UUID is a subtype of the STRING data type. This UUID column can be defined as GENERATED BY DEFAULT. The system then automatically generates a value for the UUID column if you do not supply a value for it.

uuid_definition := AS UUID [GENERATED BY DEFAULT]

Declares the type of a column to be the UUID type. If the GENERATED BY DEFAULT keywords are used, the system generates a value for the UUID column automatically, if the user does not supply one.

UUID Column Characteristics :

  • One table can have multiple columns defined as «STRING AS UUID». However, one table can have only one column defined as «STRING AS UUID GENERATED BY DEFAULT».
  • Since the Identity column is also generated by the system, the Identity column and the UUID GENERATED BY DEFAULT columns are mutually exclusive. That means only one IDENTITY column or one «UUID GENERATED BY DEFAULT» can exist per table.
  • You create a UUID column as part of a CREATE TABLE DDL statement or add a UUID column to an existing table with an ALTER TABLE DDL statement.
  • You can also index UUID columns via secondary indexes.

Example 1: UUID Column without GENERATED BY DEFAULT

CREATE TABLE myTable (id STRING AS UUID,name STRING, PRIMARY KEY (id)); Statement completed successfully

In the above example, the id column has no «GENERATED BY DEFAULT» defined, therefore, whenever you insert a new row, you need to explicitly specify a value for the id column.

INSERT INTO myTable values("a81bc81b-dead-4e5d-abff-90865d1e13b1", "test1"); Statement completed successfully

Input format: The input string must conform to the format specified by RFC 4122. An IllegalArgumentException is thrown if the input string does not conform to the string representation as described at Class UUID

Output format: The output is a UUID canonical format. This is 32 hexadecimal(base-16) digits, displayed in five groups separated by hyphens, in the form 8-4-4-4-12 for a total of 36 characters (32 hexadecimal characters and 4 hyphens).

The value for a UUID column can also be generated using the random_uuid function, which returns a randomly generated UUID, as a string of 36 characters. See Function to generate a UUID string

Example 2: UUID Column using GENERATED BY DEFAULT

CREATE TABLE myTable (id STRING AS UUID GENERATED BY DEFAULT, name STRING, PRIMARY KEY (id)); Statement completed successfully

In the above example, the id column has «GENERATED BY DEFAULT» defined, therefore, whenever you insert a new row without specifying the value for the id column, Oracle NoSQL Database automatically generates a value for it.

INSERT INTO myTable VALUES(default,"test1"); Statement completed successfully

Table 3-1 Comparison between Identity Column and UUID column

Costs less storage space than a corresponding UUID column.

If LONG is the primary key, it costs a maximum of 10 bytes. If LONG is a non-primary key, it costs a maximum of 8 bytes.

Costs more storage space than a corresponding Identity column.

If the UUID value is the primary key, it costs 19-bytes. If the UUID value is a non-primary key, it costs 16-bytes.

Источник

Uuid java default value

Learn Latest Tutorials

Splunk tutorial

SPSS tutorial

Swagger tutorial

T-SQL tutorial

Tumblr tutorial

React tutorial

Regex tutorial

Reinforcement learning tutorial

R Programming tutorial

RxJS tutorial

React Native tutorial

Python Design Patterns

Python Pillow tutorial

Python Turtle tutorial

Keras tutorial

Preparation

Aptitude

Logical Reasoning

Verbal Ability

Company Interview Questions

Artificial Intelligence

AWS Tutorial

Selenium tutorial

Cloud Computing

Hadoop tutorial

ReactJS Tutorial

Data Science Tutorial

Angular 7 Tutorial

Blockchain Tutorial

Git Tutorial

Machine Learning Tutorial

DevOps Tutorial

B.Tech / MCA

DBMS tutorial

Data Structures tutorial

DAA tutorial

Operating System

Computer Network tutorial

Compiler Design tutorial

Computer Organization and Architecture

Discrete Mathematics Tutorial

Ethical Hacking

Computer Graphics Tutorial

Software Engineering

html tutorial

Cyber Security tutorial

Automata Tutorial

C Language tutorial

C++ tutorial

Java tutorial

.Net Framework tutorial

Python tutorial

List of Programs

Control Systems tutorial

Data Mining Tutorial

Data Warehouse Tutorial

Javatpoint Services

JavaTpoint offers too many high quality services. Mail us on h[email protected], to get more information about given services.

  • Website Designing
  • Website Development
  • Java Development
  • PHP Development
  • WordPress
  • Graphic Designing
  • Logo
  • Digital Marketing
  • On Page and Off Page SEO
  • PPC
  • Content Development
  • Corporate Training
  • Classroom and Online Training
  • Data Entry

Training For College Campus

JavaTpoint offers college campus training on Core Java, Advance Java, .Net, Android, Hadoop, PHP, Web Technology and Python. Please mail your requirement at [email protected].
Duration: 1 week to 2 week

Like/Subscribe us for latest updates or newsletter RSS Feed Subscribe to Get Email Alerts Facebook Page Twitter Page YouTube Blog Page

Источник

Читайте также:  Как php отправляет smtp
Оцените статью