Warum scheint die Klasse „java.util.UUID“ ihre Validierung beim Parsen einer Eingabezeichenfolge zu wiederholen?Java

Java-Forum
Anonymous
 Warum scheint die Klasse „java.util.UUID“ ihre Validierung beim Parsen einer Eingabezeichenfolge zu wiederholen?

Post by Anonymous »

Die UUID-Spezifikationen RFC 9562 und RFC 4122 definieren beide eine kanonische Textdarstellung von 128 Bit als Gruppen hexadezimaler Ziffern, die durch das Bindestrich-PLUS-Zeichen 8-4-4-4-12 getrennt sind, wie folgt:

7f1943d2-f582-11f0-8de9-0242ac120002

Wenn ich den Quellcode der OpenJDK-Implementierung untersuche, sehe ich, dass die Parsing-Methode fromString eine Unterroutine aufruft, fromString1. Diese Unterroutine scheint die Logik der ersten Methode zu wiederholen:
  • Auf Länge prüfen.
  • Auf Bindestriche prüfen.
  • Bits analysieren, um zwei lange Ganzzahlwerte zu erzeugen.
Erste Methode, die das Parsen durchführt:

Code: Select all

// https://github.com/openjdk/jdk/blob/master/src/java.base/share/classes/java/util/UUID.java
public static UUID fromString(String name) {
if (name.length() == 36) {
char ch1 = name.charAt(8);
char ch2 = name.charAt(13);
char ch3 = name.charAt(18);
char ch4 = name.charAt(23);
if (ch1 == '-' && ch2 == '-' && ch3 == '-' && ch4 == '-') {
long msb1 = parse4Nibbles(name, 0);
long msb2 = parse4Nibbles(name, 4);
long msb3 = parse4Nibbles(name, 9);
long msb4 = parse4Nibbles(name, 14);
long lsb1 = parse4Nibbles(name, 19);
long lsb2 = parse4Nibbles(name, 24);
long lsb3 = parse4Nibbles(name, 28);
long lsb4 = parse4Nibbles(name, 32);
if ((msb1 | msb2 | msb3 | msb4 | lsb1 | lsb2 | lsb3 | lsb4) >= 0) {
return new UUID(
msb1

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post