Каковы некоторые из лучших способов создания GUID в Java?
Создание GUID в Java
Ответ 1
Посмотрите класс UUID в комплекте с Java 5 и более поздними версиями.
Например:
- Если вам нужен случайный UUID, вы можете использовать метод randomUUID.
- Если вы хотите, чтобы UUID был инициализирован определенным значением, вы можете использовать конструктор UAID или fromString.
Ответ 2
java.util.UUID.randomUUID();
Ответ 3
Это зависит от того, какой тип UUID вы хотите.
-
Стандартный класс Java
UUID
генерирует случайные UUID версии 4. (ОБНОВЛЕНИЕ - UUID версии 3 (имя) также могут быть сгенерированы.) Он также может обрабатывать другие варианты, хотя он не может генерировать их. (В этом случае "дескриптор" означает создание экземпляровUUID
из представленийlong
,byte[]
илиString
и предоставление некоторых соответствующих средств доступа.) -
Реализация Java UUID Generator (JUG) направлена на поддержку "всех 3" официальных "типов UUID, как определено в RFC-4122 "... хотя RFC фактически определяет 4 типа и упоминает 5-й тип.
Для получения дополнительной информации о типах и вариантах UUID в Википедии есть хорошее резюме, а подробности - в RFC 4122 и других спецификациях.
Ответ 4
Просто чтобы расширить ответ Марк Байерс с примером:
import java.util.UUID;
public class RandomStringUUID {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID=" + uuid.toString() );
}
}
Ответ 5
Другие ответы верны, особенно этот Stephen C.
Достижение внешней Java
Создание значения UUID в Java ограничено Версия 4 (случайный) из-за проблем с безопасностью.
Если вы хотите использовать другие версии UUID, один из способов заключается в том, чтобы ваше приложение Java находилось вне JVM для создания UUID, вызывая:
- Утилита командной строки
В комплекте с почти каждой операционной системой.
Например,uuidgen
в Mac OS X, BSD и Linux. - Сервер базы данных
Используйте JDBC для получения UUID, сгенерированного на сервере базы данных.
Например, расширение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 используется как метод хеширования.
-
- Веб-сервис
Например, UUID Generator создает версии 1 и 3, а также значения nil и GUID.
Ответ 6
Вы можете использовать этот код для генерации GUID.
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
public class StrictMicroSecondTimeBasedGuid
{
private final static Logger logger = Logger
.getLogger(StrictMicroSecondTimeBasedGuid.class);
private static final long MICRO_IN_MILL = 1000;
private static final long NANO_IN_MICRO = 1000;
private static long baseNanoTime;
private static long baseTimeInMicro;
private static long lastGuid;
static
{
/*
* Nanosecond time reference is not known, therfore following logic is
* needed to calculate time in micro without knowing refrence point of
* nano time*
*/
baseNanoTime = System.nanoTime();
baseTimeInMicro = System.currentTimeMillis() * MICRO_IN_MILL;
lastGuid = baseTimeInMicro;
}
public static synchronized Long newGuid()
{
long newGuid;
while ((newGuid = calNewTimeInMicro()) <= lastGuid)
{
/** we have to check for this log, we don't want to see log. */
logger.debug("wait of 10-microsecond is introduced to get new guid");
try
{
TimeUnit.MICROSECONDS.sleep(10);
} catch (InterruptedException e)
{
logger.error("Error", e);
}
}
lastGuid = newGuid;
return newGuid;
}
private static long calNewTimeInMicro()
{
return baseTimeInMicro
+ ((System.nanoTime() - baseNanoTime) / NANO_IN_MICRO);
}
}