Konvertiert ein ByteArray-für UUID java
Frage ist, Wie kann ich ByteArray konvertieren, um die GUID.
Zuvor konvertierte ich meine guid zu byte-array, und nach einer Transaktion ich brauche meine guid zurück, die aus byte-array. Wie mache ich das. Zwar irrelevant, aber die Konvertierung von Guid zu byte[] ist als unten
public static byte[] getByteArrayFromGuid(String str)
{
UUID uuid = UUID.fromString(str);
ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
bb.putLong(uuid.getMostSignificantBits());
bb.putLong(uuid.getLeastSignificantBits());
return bb.array();
}
aber wie wandle ich es wieder??
Ich habe versucht, diese Methode aber Ihre Rückkehr mich nicht denselben Wert
public static String getGuidFromByteArray(byte[] bytes)
{
UUID uuid = UUID.nameUUIDFromBytes(bytes);
return uuid.toString();
}
Jede Hilfe wird geschätzt.
InformationsquelleAutor Android | 2014-06-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Methode
nameUUIDFromBytes()
wandelt Namen in eine UUID. Intern wird es angewendet hashing und etwas schwarze Magie, drehen Sie einen beliebigen Namen (also einen string) in eine gültige UUID.Müssen Sie die
new UUID(long, long);
Konstruktor statt:Aber da brauchen Sie nicht die UUID-Objekt, können Sie einfach eine hex-dump:
Um genauer zu sein über die 'schwarze Magie' (die nicht wirklich klar, was wirklich passiert ist), werfen Sie einen Blick auf docs.oracle.com/javase/7/docs/api/java/util/UUID.html. Nämlich
public UUID(long mostSigBits, long leastSigBits)
konstruieren kann jede Art von UUID, die Sie wollen. Es kann sich wahrscheinlich auch ungültige UUIDs mit anderen Typen als 1, 2, 3 oder 4-aber ich haben nicht überprüft.nameUUIDFromBytes
nur konstruieren Sie eine Typ-3-UUID.InformationsquelleAutor Aaron Digulla
Versuchen:
Dein problem ist, dass
UUID.nameUUIDFromBytes(...)
schafft nur Typ 3 UUIDs, aber Sie wollen keine UUID-Typ.Eine UUID ist definiert, um 128 bits (16 bytes). Wenn Sie nur die ersten 32 bits, es gibt keine Möglichkeit zu "reparieren". Möchten Sie vielleicht hinzufügen, input-Validierung und werfen ein
IllegalArgumentException
wenn die Eingabe != 16 bytes, obwohl.InformationsquelleAutor haraldK
Versuchen Sie gleiche Prozess in umgekehrter Richtung:
Für beide Gebäude und analysieren Sie Ihre byte[], die Sie wirklich brauchen, zu prüfen, die byte-Reihenfolge.
Wenn es 8 oder 16 bytes, es wird funktionieren. Was wäre passiert, wenn es 4 bytes. Ich denke, es wird Abstürzen ( java.nio.bufferoverflowexception). Wie können wir dieses Problem beheben?
Byte-Reihenfolge behoben das problem für mich, danke!
InformationsquelleAutor Brett Okken