Создание GUID в Java
6 ответов
посмотреть класс UUID в комплекте с Java 5 и выше.
например:
- если вы хотите случайный UUID, вы можете использовать randomUUID метод.
- если вы хотите, чтобы UUID был инициализирован определенным значением, вы можете использовать конструктор UUID или fromString метод.
Это зависит от того, какой UUID вы хотите.
стандартный Java
UUID
класс генерирует Вариант 4 (random) UUIDs. (обновление - Вариант 3 (name) UUIDs также могут быть сгенерированы.) Он также может обрабатывать другие варианты, хотя и не может их генерировать. (В этом случае "handle" означает constructUUID
экземпляровlong
,byte[]
илиString
представлений и соответствующих методов доступа.)на Java UUID генератор (кувшин) реализация направлена на поддержку "всех 3" официальных " типов UUID, определенных RFC-4122" ... хотя RFC фактически определяет 4 типа и упоминает 5-й тип.
для получения дополнительной информации о типах и вариантах UUID в Википедия, и горы подробности в RFC 4122 и другие технические характеристики.
чтобы расширить ответ Марка Байерса примером:
import java.util.UUID;
public class RandomStringUUID {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
String randomUUIDString = uuid.toString();
System.out.println("UUID=" + randomUUIDString );
}
}
другие ответы верны, особенно этот by Стивен C.
Выход За Пределы Java
создание UUID значение в Java ограничено версия 4 (random) из-за соображений безопасности.
если вы хотите другие версии UUIDs, один из путей должен иметь ваше Java-приложение за пределами JVM для создания UUID путем вызова on:
вы можете использовать этот код для создания 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's 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);
}
}