Как преобразовать два 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();