如何将两个 long 类型转换成字节数组 = 如何将 UUID 转换成字节数组?

12

我正在使用Java的UUID,需要将UUID转换为字节数组。奇怪的是,UUID类没有提供"toBytes()"方法。

我已经找到了两种方法:

UUID.getMostSignificantBits()
and
UUID.getLeasSignificantBits()

但是如何将其转换为字节数组?结果应该是一个包含这两个值的byte[]数组。我需要进行位移操作,但是具体怎么实现呢?

更新:

我找到了以下代码:

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

这种方法正确吗?

还有其他的方法(供学习使用)吗?

非常感谢! Jens


更新中的代码不正确:它只在缓冲区中分配了两个字节,但你需要16个。下面的答案中的代码是正确的。 - Jon Tirsen
3个回答

16

你可以使用 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

如果您更喜欢“常规”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

对于任何试图在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();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接