12
votes

Comment convertir deux longs à un tableau d'octets = Comment convertir UUID en une matrice d'octet?

J'utilise javas uuid code> et devez convertir un UUID en une matrice d'octet. Étrangement, la classe UUID ne fournit pas de "Tobyltes ()" code> méthode.

J'ai déjà découvert sur les deux méthodes: p> xxx pré>

mais Comment obtenir cela dans un tableau d'octets? Le résultat devrait être un octet [] avec ces valeurs de remorquage. Je dois en quelque sorte faire des bittshifting mais, comment? P>

Mise à jour: strong> p>

J'ai trouvé: p>

 ByteBuffer byteBuffer = MappedByteBuffer.allocate(2);
 byteBuffer.putLong(uuid.getMostSignificantBits());
 byteBuffer.putLong(uuid.getLeastSignificantBits());


1 commentaires

Le code de la mise à jour n'est pas correct: il n'allocie que deux octets dans le tampon, mais vous avez besoin de 16. Le code dans la réponse ci-dessous est cependant correct.


3 Réponses :


15
votes

Vous pouvez utiliser BYTEBUFFER

 byte[] bytes = new byte[16];
 ByteBuffer bb = ByteBuffer.wrap(bytes);
 bb.order(ByteOrder.LITTLE_ENDIAN or ByteOrder.BIG_ENDIAN);
 bb.putLong(UUID.getMostSignificantBits());
 bb.putLong(UUID.getLeastSignificantBits());

 // to reverse
 bb.flip();
 UUID uuid = new UUID(bb.getLong(), bb.getLong());


0 commentaires

5
votes

une option si vous préférez "régulier" IO à NIO:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.write(uuid.getMostSignificantBits());
dos.write(uuid.getLeastSignificantBits());
dos.flush(); // May not be necessary
byte[] data = dos.toByteArray();


0 commentaires

0
votes

Pour quiconque tente de l'utiliser dans Java 1.7, j'ai trouvé ce qui suit:
<!-- language: lang-java -->
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream dos = new DataOutputStream(baos);
dos.writeLong(password.getMostSignificantBits());
dos.writeLong(password.getLeastSignificantBits());
dos.flush(); // May not be necessary
return baos.toByteArray();


0 commentaires