{"id":124,"date":"2023-12-30T22:00:56","date_gmt":"2023-12-30T21:00:56","guid":{"rendered":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=124"},"modified":"2024-01-08T09:11:39","modified_gmt":"2024-01-08T08:11:39","slug":"uuids-in-java","status":"publish","type":"post","link":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/?p=124","title":{"rendered":"UUIDs in Java"},"content":{"rendered":"\n<p>UUIDs (Universally Unique Identifiers) sind eine wichtige Komponente in der Welt der Softwareentwicklung, insbesondere in Java. Sie dienen dazu, eindeutige Bezeichner f\u00fcr Objekte und Ressourcen zu generieren. In diesem Artikel werden wir uns ausf\u00fchrlich mit UUIDs in Java befassen. Wir werden zun\u00e4chst erkl\u00e4ren, was eine UUID ist, bevor wir die UUID-Klasse in Java einf\u00fchren und zeigen, wie man zuf\u00e4llige UUIDs erstellt. Anschlie\u00dfend werden wir die verschiedenen Versionen von UUIDs erl\u00e4utern, wobei wir uns besonders auf Version 1, 4 und die kombinierten Versionen 3 und 5 konzentrieren werden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Was ist eine UUID?<\/h2>\n\n\n\n<p>Eine UUID, oder Universally Unique Identifier, ist eine 128-Bit lange Zeichenfolge, die dazu verwendet wird, Objekte oder Ressourcen in einer eindeutigen Weise zu identifizieren. UUIDs sind global eindeutig, was bedeutet, dass es \u00e4u\u00dferst unwahrscheinlich ist, dass zwei unterschiedliche Entit\u00e4ten die gleiche UUID generieren. Dies macht sie ideal f\u00fcr viele Anwendungsf\u00e4lle, bei denen Eindeutigkeit von entscheidender Bedeutung ist, wie zum Beispiel in verteilten Systemen und Datenbanken.<\/p>\n\n\n\n<p>UUIDs k\u00f6nnen auf verschiedene Arten generiert werden, aber sie folgen einem bestimmten Format. Eine typische UUID sieht so aus:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">123e4567-e89b-12d3-a456-426614174000<\/code><\/span><\/pre>\n\n\n<p>Eine UUID besteht aus f\u00fcnf Gruppen von Hexadezimalzahlen, die durch Bindestriche getrennt sind. Jede Gruppe hat eine unterschiedliche Bedeutung und wird bei verschiedenen Versionen von UUIDs auf unterschiedliche Weisen generiert.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Die UUID-Klasse in Java<\/h2>\n\n\n\n<p>In Java k\u00f6nnen UUIDs mithilfe der <code>java.util.UUID<\/code>-Klasse erstellt und verwaltet werden. Diese Klasse bietet verschiedene Methoden zum Erzeugen, Analysieren und Vergleichen von UUIDs. Um eine zuf\u00e4llige UUID in Java zu generieren, k\u00f6nnen Sie die <code>randomUUID()<\/code>-Methode verwenden. Hier ist ein einfaches Beispiel:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.util.UUID;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">UUIDExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        UUID uuid = UUID.randomUUID();\n        System.out.println(<span class=\"hljs-string\">\"Zuf\u00e4llige UUID: \"<\/span> + uuid.toString());\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel wird die <code>randomUUID()<\/code>-Methode aufgerufen, um eine neue zuf\u00e4llige UUID zu erstellen, und dann wird sie in Zeichenfolgenform ausgegeben.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Verschiedene Versionen von UUIDs<\/h2>\n\n\n\n<p>UUIDs k\u00f6nnen in verschiedenen Versionen erstellt werden, die jeweils unterschiedliche Eigenschaften und Verwendungszwecke haben. Im Folgenden werden die wichtigsten UUID-Versionen erl\u00e4utert:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Version 1 (Zeitbasierte UUID)<\/h3>\n\n\n\n<p>Die Version 1 UUIDs werden aus einem Zeitstempel und der MAC-Adresse des Ger\u00e4ts generiert, auf dem sie erstellt werden. Dies garantiert, dass sie zeitlich und r\u00e4umlich eindeutig sind. Version 1 UUIDs haben jedoch den Nachteil, dass sie einige Datenschutzprobleme aufwerfen, da sie Informationen \u00fcber den Ersteller preisgeben k\u00f6nnen.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Version 4 (Zuf\u00e4llige UUID)<\/h3>\n\n\n\n<p>Die meisten in Java generierten UUIDs sind Version 4 UUIDs. Sie werden aus zuf\u00e4lligen Bytes erzeugt und sind daher praktisch frei von vorhersehbaren Mustern. Version 4 UUIDs sind ideal, wenn die Eindeutigkeit wichtiger ist als die Herkunft oder der Name des Erstellers.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Version 3 und 5 (Namensbasierte UUID)<\/h3>\n\n\n\n<p>Version 3 und 5 UUIDs werden aus einem Namensraum (Namespace) und einem Eingabestring generiert. Sie sind n\u00fctzlich, um aus einem bekannten Namen eine eindeutige UUID abzuleiten. Dies kann beispielsweise in der Dom\u00e4nenregistrierung oder bei der Generierung von Hashwerten verwendet werden. Version 3 und 5 UUIDs sind sich sehr \u00e4hnlich, verwenden jedoch unterschiedliche Hash-Algorithmen zur Generierung.<\/p>\n\n\n\n<p>Hier ist ein Beispiel, wie Sie eine Version 3 oder 5 UUID in Java erstellen k\u00f6nnen:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> java.util.UUID;\n<span class=\"hljs-keyword\">import<\/span> java.nio.charset.StandardCharsets;\n<span class=\"hljs-keyword\">import<\/span> java.security.MessageDigest;\n<span class=\"hljs-keyword\">import<\/span> java.security.NoSuchAlgorithmException;\n\npublic <span class=\"hljs-class\"><span class=\"hljs-keyword\">class<\/span> <span class=\"hljs-title\">UUIDExample<\/span> <\/span>{\n    public <span class=\"hljs-keyword\">static<\/span> UUID generateNameBasedUUID(<span class=\"hljs-built_in\">String<\/span> namespace, <span class=\"hljs-built_in\">String<\/span> name, int version) {\n        <span class=\"hljs-keyword\">try<\/span> {\n            MessageDigest md = MessageDigest.getInstance(<span class=\"hljs-string\">\"SHA-1\"<\/span>);\n            md.update(namespace.getBytes(StandardCharsets.UTF_8));\n            md.update(name.getBytes(StandardCharsets.UTF_8));\n            byte&#91;] digest = md.digest();\n            digest&#91;<span class=\"hljs-number\">6<\/span>] &amp;= <span class=\"hljs-number\">0x0f<\/span>;  <span class=\"hljs-comment\">\/\/ Clear version<\/span>\n            digest&#91;<span class=\"hljs-number\">6<\/span>] |= (byte) (version &lt;&lt; <span class=\"hljs-number\">4<\/span>);  <span class=\"hljs-comment\">\/\/ Set version<\/span>\n            digest&#91;<span class=\"hljs-number\">8<\/span>] &amp;= <span class=\"hljs-number\">0x3f<\/span>;  <span class=\"hljs-comment\">\/\/ Clear variant<\/span>\n            digest&#91;<span class=\"hljs-number\">8<\/span>] |= <span class=\"hljs-number\">0x80<\/span>;  <span class=\"hljs-comment\">\/\/ Set to IETF variant<\/span>\n            <span class=\"hljs-keyword\">return<\/span> UUID.nameUUIDFromBytes(digest);\n        } <span class=\"hljs-keyword\">catch<\/span> (NoSuchAlgorithmException e) {\n            <span class=\"hljs-keyword\">throw<\/span> <span class=\"hljs-keyword\">new<\/span> RuntimeException(<span class=\"hljs-string\">\"Error generating UUID\"<\/span>, e);\n        }\n    }\n\n    public <span class=\"hljs-keyword\">static<\/span> <span class=\"hljs-keyword\">void<\/span> main(<span class=\"hljs-built_in\">String<\/span>&#91;] args) {\n        <span class=\"hljs-built_in\">String<\/span> namespace = <span class=\"hljs-string\">\"your_namespace\"<\/span>;\n        <span class=\"hljs-built_in\">String<\/span> name = <span class=\"hljs-string\">\"your_name\"<\/span>;\n        int version = <span class=\"hljs-number\">5<\/span>;  <span class=\"hljs-comment\">\/\/ or 3 for Version 3 UUID<\/span>\n        UUID uuid = generateNameBasedUUID(namespace, name, version);\n        System.out.println(<span class=\"hljs-string\">\"Name-based UUID: \"<\/span> + uuid.toString());\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code-Sprache:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p>In diesem Beispiel verwenden wir die SHA-1-Hashfunktion, um eine UUID basierend auf einem Namespace und einem Namen zu generieren. Je nachdem, ob Sie Version 3 oder Version 5 UUIDs ben\u00f6tigen, \u00e4ndern Sie den <code>version<\/code>-Parameter entsprechend.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Fazit<\/h2>\n\n\n\n<p>UUIDs sind in der Java-Entwicklung \u00e4u\u00dferst n\u00fctzlich, um eindeutige Identifikatoren zu generieren. Die <code>java.util.UUID<\/code>-Klasse erleichtert die Erzeugung und Verwaltung von UUIDs erheblich. Je nach den Anforderungen Ihres Projekts k\u00f6nnen Sie zwischen verschiedenen UUID-Versionen w\u00e4hlen, wobei Version 4 UUIDs die am h\u00e4ufigsten verwendeten sind, wenn die Eindeutigkeit im Vordergrund steht.<\/p>\n\n\n\n<p>Es ist wichtig zu beachten, dass UUIDs zwar sehr eindeutig sind, aber auch relativ lange Zeichenfolgen erzeugen, was ihren Speicherbedarf erh\u00f6hen kann. Daher sollten Sie sicherstellen, dass Sie sie nur dann verwenden, wenn sie wirklich ben\u00f6tigt werden, und alternative Methoden zur Identifikation von Ressourcen in Betracht ziehen, wenn UUIDs zu viel Overhead verursachen w\u00fcrden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>UUIDs (Universally Unique Identifiers) sind eine wichtige Komponente in der Welt der Softwareentwicklung, insbesondere in Java. Sie dienen dazu, eindeutige Bezeichner f\u00fcr Objekte und Ressourcen zu generieren. In diesem Artikel werden wir uns ausf\u00fchrlich mit UUIDs in Java befassen. Wir werden zun\u00e4chst erkl\u00e4ren, was eine UUID ist, bevor wir die UUID-Klasse in Java einf\u00fchren und [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-124","post","type-post","status-publish","format-standard","hentry","category-plain_java"],"_links":{"self":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/124","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=124"}],"version-history":[{"count":1,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/124\/revisions"}],"predecessor-version":[{"id":125,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=\/wp\/v2\/posts\/124\/revisions\/125"}],"wp:attachment":[{"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=124"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=124"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.xn--javaeinfacherklrt-4qb.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=124"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}