Jakie są najlepsze sposoby tworzenia identyfikatora GUID w języku Java?Tworzenie identyfikatora GUID w języku Java
Odpowiedz
Zapoznaj się z UUID class w pakiecie z Java 5 i nowszymi.
Na przykład:
- Jeśli chcesz losowy UUID można użyć metody randomUUID.
- Jeśli chcesz, aby identyfikator UUID został zainicjalizowany do określonej wartości, możesz użyć metody UUID constructor lub fromString.
java.util.UUID.randomUUID();
Podczas gdy brainacs powyżej pisze rozprawy o jakości lub treści pytania, lub podać kilka linków do rozszerzonego czytania na temat pojęcia GUID, ta odpowiedź daje 4 słowa, 3 okresy i oraz nawiasy otwierające i zamykające. Bravo Kaleb. – user1091524
@angel Tak, teoretycznie możliwe jest, aby metoda 'UUID.randomUUID' zwróciła duplikat, ale ** nie jest to w rzeczywistości realna uwaga **. Implementacja Oracle/OpenJDK korzysta z generatora liczb losowych kryptograficznie. Biorąc to pod uwagę i biorąc pod uwagę * zasięg astronomiczny * podany przez tak wiele bitów w UUID, możesz wygenerować wiele milionów takich wartości w swojej aplikacji i nadal dobrze spać. Korzystanie z jednego z pozostałych wariantów jeszcze bardziej zmniejsza możliwość kolizji jeszcze bliższej zeru z powodu użycia "spacji i czasu", [1] adresu MAC lub nazwy oraz [2] bieżącej daty i czasu, jako ograniczeń. –
@RenniePet Eh, jeśli jesteś paranoikiem i masz dostęp do listy już używanych identyfikatorów podczas tworzenia nowego, po prostu generujesz nowe w 'while' dopóki nie dostaniesz tego, którego nie ma w środku twoja lista: p – Nyerguds
To zależy jaką UUID chcesz.
Standardowe Java
UUID
klasa wytwarza Version 4 (losowo) UUID. (UPDATE - Version 3 (nazwa) Można również generować identyfikatory UUID). Może również obsługiwać inne warianty, ale nie może ich wygenerować. (W tym przypadku, „uchwyt” oznacza konstruktUUID
wystąpienia zlong
,byte[]
lubString
reprezentacji oraz zapewnienie odpowiednich udostępniające).Realizacja Java UUID Generator (JUG) służyć do wspierania „wszystkich typów 3«oficjalnych»z UUID jak określono RFC-4122 "... chociaż RFC w rzeczywistości definiuje 4 typy i wspomina o piątym typie.
Aby uzyskać więcej informacji na temat typów i wariantów UUID, jest dobrym podsumowaniem w Wikipedia, a krwawe szczegóły są w RFC 4122 i innych specyfikacji.
Nie do końca prawda, może również generować identyfikatory UUID oparte na nazwie (wersja 3) z 'UUID.nameUUIDFromBytes (nazwa bajtu [])' –
Poprawiam się.Oparłem się na opisie javadoc, który mówi * "Statyczna fabryka, aby ** pobrać ** UUID typu 3 (bazujący na nazwach) w oparciu o określoną tablicę bajtów." * –
Nie sądzę, że wpis jest dokładny. Dokumenty [UUID Java docs] (https://docs.oracle.com/javase/8/docs/api/index.html?overview-summary.html) stwierdzają, że konstruktor generuje wariant typu 2, a nie losowy. Dla typu 3 użyj 'public static UUID nameUUIDFromBytes (byte [] name)'. dla typu 4 użyj 'public static UUID randomUUID()'. Typ 1 nie jest dostępny w klasie JDK. – slartibartfast
Inne odpowiedzi są poprawne, szczególnie this one przez Stephen C.
Osiągnięcie Poza Java
Generating a UUID wartość ciągu Java jest ograniczona do Version 4 (random) z powodu obaw o bezpieczeństwo.
Jeśli chcesz inne wersje UUID, jedna aleja jest posiadanie aplikacji Java zasięg poza JVM wygenerować UUID dzwoniąc na:
- wiersza poleceń narzędzie
pakiecie z prawie każdym systemem operacyjnym .
Na przykład:uuidgen
znalezione w systemie Mac OS X, BSD i Linux. - Serwer bazy danych
Użyj numeru JDBC, aby pobrać identyfikator UUID wygenerowany na serwerze bazy danych.
Na przykład rozszerzenieuuid-ossp
często jest dołączane do Postgres.Że rozszerzenie może generuje wersji 1, 3 i 4 wartości i dodatkowo paru odmianach:uuid_generate_v1mc()
- generowanie wersji 1 UUID ale używa losowy adres MAC multicast zamiast prawdziwego adresu MAC komputera.uuid_generate_v5(namespace uuid, name text)
- generuje identyfikator UUID w wersji 5, który działa jak identyfikator UUID w wersji 3, z tym wyjątkiem, że SHA-1 jest używana jako metoda mieszania.
- Web Service
Na przykład UUID Generator tworzy wersji 1 & 3, jak również nil values i GUID.
Dear Down- Wyborcy: Proszę zostawić krytykę wraz z głosowaniem. Chciałbym wiedzieć, co jest nie tak z tą odpowiedzią, zwłaszcza, że z powodzeniem zastosowałem wszystkie trzy sugerowane rozwiązania w moich własnych aplikacjach Java. –
Nie przesłałem odpowiedzi, ale mam kilka problemów z twoją odpowiedzią: Po pierwsze, już pokazano, że jest źle, że możesz pobrać V4 tylko ze standardowej biblioteki Java (V3 jest również możliwa). Po drugie, wydajesz się brzmieć tak, jakby nie było opcji w Javie poza standardową biblioteką, a także ręcznych "ze względów bezpieczeństwa". I na koniec, po prostu generalnie nieefektywne (programowanie i/lub wydajność) uruchamianie zależy od źródeł zewnętrznych, gdy jest wiele sposobów na to, aby to zrobić w Javie (chyba, że jest to potrzebne, oczywiście, np. Jako element tworzenia rekord w serwerze SQL). –
Wystarczy przedłużyć odpowiedź Mark Byers w przykładzie:
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);
}
}
Drodzy głosujący, mógłbyś lepiej wyjaśnić, co jest nie tak z moją odpowiedzią? –
Można 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);
}
}
- 1. Generowanie identyfikatora GUID z łańcucha, który nie ma formatu GUID
- 2. Czy warto usunąć myślnik z identyfikatora GUID?
- 3. Konwersja identyfikatora GUID na varchar (32)
- 4. Tworzenie podzbioru zestawu w języku Java
- 5. Tworzenie obiektów w języku Java pytanie
- 6. Tworzenie stron w języku Java bez Eclipse
- 7. Generowanie nowego losowego identyfikatora GUID w identyfikatorze Delphi IDE
- 8. Używanie identyfikatora GUID (lub podobnego) powoduje obniżenie wydajności w Redis?
- 9. jak utworzyć GUID w Java EE
- 10. Tworzenie unikalnego identyfikatora globalnego w JavaScript
- 11. Tworzenie niestandardowego identyfikatora obiektu w MongoDB
- 12. Tworzenie identyfikatora iCloud w panelu programisty iOS
- 13. Jak zmienić kolumnę identyfikatora int na Guid z migracją EF?
- 14. Jak animacja w języku Java?
- 15. Tworzenie instancji z łańcucha znaków w języku Java
- 16. Tworzenie poleceń dla aplikacji terminalowej w języku Java
- 17. Drukowanie w języku Java: tworzenie PageFormat z minimalnym dopuszczalnym marginesem
- 18. Tworzenie tablicy podczas przekazywania jej jako argumentu w języku Java
- 19. Utwórz losowy identyfikator GUID w języku C# w określonym przedziale czasu
- 20. Tworzenie PDF z Java
- 21. Jak analizować negatywnie w języku Java w języku Java
- 22. Tworzenie wykresu w java
- 23. Klon() w języku Java
- 24. REFERENCJE GUID
- 25. Konwersja Guid na Nullable Guid
- 26. GUID generujący bez myślnika
- 27. Tworzenie wtyczek Eclipse bez Java
- 28. SCOPE_IDENTITY() dla identyfikatorów GUID?
- 29. Dlaczego nie mogę ufać GUID wygenerowanemu przez klienta? Czy traktowanie PK jako złożonego klienta-GUID i GUID serwera rozwiązuje cokolwiek?
- 30. Jak zweryfikować podpis JWT dla tokenu identyfikatora usługi Azure B2C w języku Java?
@finneycanhelp - Tak, myślę, że musimy bardziej proste rzeczy, jak to na Stackoverflow, jak również. Wiem, że korzystam z nich znacząco. Problem polega na tym, że ludzie często "płoną" za publikowanie prostych pytań, które są przyjazne dla wyszukiwarek przez osoby, które znają już odpowiedź i uważają, że pytanie jest zbyt proste. Robię to, co właśnie zrobiłeś, kiedy widzę proste pytanie, które ludziom się nie podoba, komentuję na poparcie tego pytania. W tym przypadku jest fajne, że pytanie zostało zamknięte, ponieważ ludzie szukający "GUID Java" go znajdą, a następnie będą mogli zobaczyć odpowiedzi na oba pytania. –
Pytanie na http://stackoverflow.com/questions/325443/generate-uuid-in-java jest bardziej o zderzeniach GUID, a następnie o tym, jak to, co jest równoważne GUID w stosie technologii Java, co jest think) jest bardziej przedmiotem tego pytania. –