Tworzenie GUID w Javie
Jakie są najlepsze sposoby tworzenia GUID w Javie?
6 answers
Spójrz na klasę UUID dołączoną do Javy 5 i późniejszych.
Na przykład:
- Jeśli chcesz mieć losowy UUID, możesz użyć metody randomUUID .
- jeśli chcesz, aby UUID został zainicjowany do określonej wartości, możesz użyć konstruktora uuid lub metody fromString.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-07-16 21:11:10
java.util.UUID.randomUUID();
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-06 01:16:03
To zależy jakiego rodzaju UUID chcesz.
Standardowa Java
UUID
Klasa generuje Version 4 (random) uuid. (UPDATE - Można również wygenerować uuid wersji 3 (name).) Może obsługiwać również inne warianty, choć nie może ich wygenerować. (W tym przypadku "uchwyt" oznacza konstruowanieUUID
instancji zlong
,byte[]
lubString
reprezentacje, oraz podać kilka odpowiednich accessors.)Implementacja Java uuid Generator (JUG) rzekomo obsługuje "wszystkie 3' oficjalne ' typy UUID zdefiniowane przez RFC-4122 "... chociaż RFC faktycznie definiuje 4 typy i wymienia 5. Typ.
Aby uzyskać więcej informacji na temat typów i wariantów UUID, istnieje dobre podsumowanie w Wikipedia, a krwawe szczegóły są w RFC 4122 i innych specyfikacjach.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-13 22:56:00
Wystarczy rozszerzyć odpowiedź Marka Byersa o Przykład:
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 );
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-10 09:37:37
Inne odpowiedzi są poprawne, szczególnie TA autorstwa Stephena C .
Sięganie Poza Javę
Generowanie wartości UUID w Javie jest ograniczone do W wersji 4 (random) ze względu na problemy z bezpieczeństwem.
Jeśli chcesz mieć inne wersje uuid, jedną z opcji jest to, aby Twoja aplikacja Java sięgała poza JVM , aby wygenerować uuid poprzez wywołanie:
-
narzędzie wiersza poleceń
W zestawie z prawie każdym system operacyjny.
na przykład,uuidgen
Znalezione w Mac OS X, BSD i Linux. -
serwer bazy danych
użyj JDBC, Aby pobrać UUID wygenerowany na serwerze bazy danych.
na przykładuuid-ossp
rozszerzenie często w pakiecie z Postgres . Rozszerzenie to może generować wartości wersji 1, 3 i 4 oraz dodatkowo kilka wariantów:- {–2]} - generuje uuid wersji 1, ale używa losowego adresu MAC multicastu zamiast prawdziwy adres MAC komputera.
- {–3]} - generuje UUID w wersji 5, który działa jak uuid w wersji 3 z tą różnicą, że SHA-1 jest używany jako metoda mieszania.
-
serwis WWW
na przykład, uuid Generator tworzy wersje 1 i 3, a także zero wartości I GUID .
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:18:20
Możesz użyć tego kodu do wygenerowania 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);
}
}
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-27 16:17:18