Jakie są najlepsze sposoby utworzenia identyfikatora GUID w Javie?
Jakie są najlepsze sposoby utworzenia identyfikatora GUID w Javie?
Odpowiedzi:
Spójrz na klasę UUID dołączoną do Javy 5 i nowszych.
Na przykład:
java.util.UUID.randomUUID();
UUID.randomUUID
metoda zwróciła duplikat, ale nie jest to wcale realistyczne . Implementacja Oracle / OpenJDK wykorzystuje kryptograficznie silny generator liczb losowych. Biorąc to pod uwagę i biorąc pod uwagę astronomiczny zasięg podany przez tak wiele bitów w UUID, możesz wygenerować wiele milionów takich wartości w swojej aplikacji i nadal dobrze spać. Zastosowanie jednego z pozostałych wariantów dodatkowo zmniejsza możliwość kolizji jeszcze bliżej zera dzięki zastosowaniu „przestrzeni i czasu”, [1] adresu lub nazwy MAC oraz [2] bieżącej daty i godziny, jako ograniczeń.
while
dopóki nie dostaniesz takiego, którego nie ma na liście: p
To zależy, jakiego rodzaju UUID chcesz.
Standardowa UUID
klasa Java generuje UUID w wersji 4 (losowy). ( AKTUALIZACJA - Wersja 3 (nazwa) UUID mogą być również generowane.) Może także obsługiwać inne warianty, chociaż nie może ich wygenerować. (W tym przypadku, „uchwyt” oznacza konstrukt UUID
przypadkach od long
, byte[]
lub String
reprezentacji oraz zapewnienie odpowiednich udostępniające).
W Java UUID Generator (JUG) objaśnienia wykonawcze do wspierania „wszystkie«oficjalne»3 rodzaje UUID zdefiniowany przez RFC-4122 ” ... choć faktycznie RFC definiuje 4 rodzaje i wymienia 5th typu.
Więcej informacji na temat typów i wariantów UUID można znaleźć w Wikipedii , a krwawe szczegóły w RFC 4122 i innych specyfikacjach.
UUID.nameUUIDFromBytes(byte[] name)
public static UUID nameUUIDFromBytes(byte[] name)
. do użytku typu 4 public static UUID randomUUID()
. Typ 1 nie jest dostępny z klasą JDK.
clockSequence()
Aby rozszerzyć odpowiedź Marka Byersa o przykład:
import java.util.UUID;
public class RandomStringUUID {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID=" + uuid.toString() );
}
}
Pozostałe odpowiedzi są poprawne, szczególnie ten jeden przez Stephen C .
Generowanie wartości UUID w Javie jest ograniczone do wersji 4 (losowej) ze względów bezpieczeństwa.
Jeśli chcesz mieć inne wersje identyfikatorów UUID, jedną z możliwości jest uzyskanie dostępu do aplikacji Java poza maszyną JVM w celu generowania identyfikatorów UUID poprzez wywołanie:
uuidgen
znaleziono w Mac OS X, BSD i Linux.uuid-ossp
rozszerzenie często jest dołączane do Postgres . To rozszerzenie może generować wartości wersji 1, 3 i 4 oraz dodatkowo kilka odmian:
uuid_generate_v1mc()
- generuje UUID wersji 1, ale używa losowego adresu MAC multiemisji zamiast rzeczywistego adresu MAC komputera.uuid_generate_v5(namespace uuid, name text)
- generuje UUID w wersji 5, który działa jak UUID w wersji 3, z tym wyjątkiem, że SHA-1 jest używany jako metoda mieszania.