Was sind einige der besten Möglichkeiten, um eine GUID in Java zu erstellen?
Was sind einige der besten Möglichkeiten, um eine GUID in Java zu erstellen?
Antworten:
Schauen Sie sich die mit Java 5 und höher gebündelte UUID-Klasse an .
Zum Beispiel:
java.util.UUID.randomUUID();
UUID.randomUUID
Methode ein Duplikat zurückgibt , aber dies ist überhaupt kein realistisches Problem . Die Oracle / OpenJDK-Implementierung verwendet einen kryptografisch starken Zufallszahlengenerator. Angesichts dessen und angesichts der astronomischen Reichweite, die durch so viele Bits in einer UUID gegeben ist, können Sie viele Millionen solcher Werte in Ihrer App generieren und trotzdem gut schlafen. Die Verwendung einer der anderen Varianten reduziert die Möglichkeit von Kollisionen weiter, die näher an Null liegen, da "Raum und Zeit", [1] MAC-Adresse oder -Name und [2] aktuelle Datums- und Uhrzeitzeit als Einschränkungen verwendet werden.
while
bis Sie eine erhalten, die nicht in Ihrer Liste enthalten ist: p
Es hängt davon ab, welche Art von UUID Sie möchten.
Die Standard-Java- UUID
Klasse generiert UUIDs der Version 4 (zufällig). ( UPDATE - Version 3 (Name) UUIDs können ebenfalls generiert werden.) Es können auch andere Varianten verarbeitet werden, obwohl sie nicht generiert werden können. (In diesem Fall wird „handle“ Mittel - Konstrukt UUID
Instanzen aus long
, byte[]
oder String
Darstellungen, und bieten einige geeignete Accessoren.)
Die Java UUID Generator (JUG) -Implementierung gibt vor, "alle 3" offiziellen "UUID-Typen gemäß RFC-4122 zu unterstützen ... obwohl der RFC tatsächlich 4 Typen definiert und einen fünften Typ erwähnt.
Weitere Informationen zu UUID-Typen und -Varianten finden Sie in Wikipedia in einer guten Zusammenfassung. Die wichtigsten Details finden Sie in RFC 4122 und den anderen Spezifikationen.
UUID.nameUUIDFromBytes(byte[] name)
public static UUID nameUUIDFromBytes(byte[] name)
. für Typ 4 verwenden public static UUID randomUUID()
. Typ 1 ist mit der JDK-Klasse nicht verfügbar.
clockSequence()
Nur um Mark Byers 'Antwort mit einem Beispiel zu erweitern:
import java.util.UUID;
public class RandomStringUUID {
public static void main(String[] args) {
UUID uuid = UUID.randomUUID();
System.out.println("UUID=" + uuid.toString() );
}
}
Die anderen Antworten sind richtig, vor allem dieses von Stephen C .
Das Generieren eines UUID- Werts in Java ist auf Version 4 beschränkt (zufällig). aus Sicherheitsgründen .
Wenn Sie andere Versionen von UUIDs wünschen, können Sie Ihre Java-App außerhalb der JVM erreichen , um UUIDs zu generieren, indem Sie Folgendes aufrufen:
uuidgen
in Mac OS X, BSD und Linux.uuid-ossp
Erweiterung häufig mit Postgres gebündelt . Diese Erweiterung kann Werte der Versionen 1, 3 und 4 sowie einige Variationen generieren:
uuid_generate_v1mc()
- generiert eine UUID der Version 1, verwendet jedoch eine zufällige Multicast-MAC-Adresse anstelle der tatsächlichen MAC-Adresse des Computers.uuid_generate_v5(namespace uuid, name text)
- generiert eine UUID der Version 5, die wie eine UUID der Version 3 funktioniert, außer dass SHA-1 als Hashing-Methode verwendet wird.