Как преобразовать два longs в байтовый массив = как преобразовать UUID в байтовый массив?

Я использую Javas UUID и вам нужно преобразовать UUID в массив байтов. Странно, что класс UUID не предоставляет метод "toBytes()".

Я уже узнал об этих двух методах:

UUID.getMostSignificantBits()
and
UUID.getLeasSignificantBits()

Но как получить это в массив байтов? результатом должен быть байт [] с этими значениями буксировки. Мне как-то нужно сделать Bitshifting, но как?

обновление:

Я нашел:

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

Этот подход подходит?

Существуют ли какие-либо другие методы (для учебных целей)?

Спасибо большое! Jens

Ответ 1

Вы можете использовать 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());

Ответ 2

Один вариант, если вы предпочитаете "обычный" 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();

Ответ 3

Для тех, кто пытается использовать это в Java 1.7, я нашел следующее:

<!-- 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();