Каковы некоторые из лучших способов создания GUID в Java?
Каковы некоторые из лучших способов создания GUID в Java?
Ответы:
Посмотрите на класс UUID, связанный с Java 5 и более поздними версиями.
Например:
java.util.UUID.randomUUID();
UUID.randomUUID
метода теоретически возможно возвратить дубликат, но это вовсе не является реальной проблемой . Реализация Oracle / OpenJDK использует криптографически сильный генератор случайных чисел. Учитывая это и учитывая астрономический диапазон, заданный таким количеством битов в UUID, вы можете сгенерировать много миллионов таких значений в своем приложении и все еще спать спокойно. Использование одного из других вариантов дополнительно уменьшает вероятность коллизий даже ближе к нулю из-за использования в качестве ограничений «пространства и времени», [1] MAC-адреса или имени и [2] текущей даты-времени.
while
пока не получите тот, которого нет в вашем списке: p
Это зависит от того, какой тип UUID вы хотите.
Стандартный UUID
класс Java генерирует случайные UUID версии 4 . ( ОБНОВЛЕНИЕ - UUID версии 3 (имя) также могут быть сгенерированы.) Он также может обрабатывать другие варианты, хотя он не может генерировать их. (В этом случае «дескриптор» означает создание UUID
экземпляров из long
,byte[]
или String
представления, и предоставляют некоторые соответствующие аксессор.)
Реализация Java UUID Generator (JUG) подразумевает поддержку «всех 3« официальных »типов UUID, как определено в RFC-4122 » ... хотя RFC фактически определяет 4 типа и упоминает 5-й тип.
Для получения дополнительной информации о типах и вариантах UUID в Википедии есть хорошее резюме , а подробности - в RFC 4122 и других спецификациях.
UUID.nameUUIDFromBytes(byte[] name)
public static UUID nameUUIDFromBytes(byte[] name)
. для использования типа 4 public static UUID randomUUID()
. Тип 1 недоступен в классе JDK.
clockSequence()
Просто чтобы расширить ответ Марка Байерса на примере:
import java.util.UUID;
public class RandomStringUUID {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID=" + uuid.toString() );
}
}
Другие ответы правильны, особенно это одна от Stephen C .
Генерация значения UUID в Java ограничена версией 4 (случайной) из соображений безопасности.
Если вам нужны другие версии UUID, один из способов заключается в том, чтобы ваше Java-приложение выходило за пределы JVM для генерации UUID путем вызова:
uuidgen
в Mac OS X, BSD и Linux.uuid-ossp
расширение часто в комплекте с Postgres . Это расширение может генерировать значения версий 1, 3 и 4 и дополнительно пару вариантов:
uuid_generate_v1mc()
- генерирует UUID версии 1, но использует реальный многоадресный MAC-адрес вместо реального MAC-адреса компьютера.uuid_generate_v5(namespace uuid, name text)
- генерирует UUID версии 5, который работает как UUID версии 3, за исключением того, что SHA-1 используется в качестве метода хеширования.