Как преобразовать два длинных в байтовый массив = как преобразовать UUID в байтовый массив? - PullRequest
12 голосов
/ 30 июля 2011

Я использую 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

Ответы [ 3 ]

15 голосов
/ 30 июля 2011

Вы можете использовать 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());
5 голосов
/ 30 июля 2011

Один вариант, если вы предпочитаете «обычный» ввод-вывод 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 голосов
/ 11 сентября 2013

Для тех, кто пытается использовать это в 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();
...