当前位置: 首页 > 面试题库 >

将uuid转换为字节,这在使用UUID.nameUUIDFromBytes(b)时有效

司徒良哲
2023-03-14
问题内容

我正在使用此代码将UUID转换为字节

public byte[] getIdAsByte(UUID uuid)
{
    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(uuid.getMostSignificantBits());
    bb.putLong(uuid.getLeastSignificantBits());
    return bb.array();
}

但是,如果我尝试使用此功能重新创建UUID,

public UUID frombyte(byte[] b)
{
    return UUID.nameUUIDFromBytes(b);
}

它不是相同的UUID。来回转换randomUUID会返回两个不同的值。

UUID u = UUID.randomUUID();
System.out.println(u.toString());
System.out.println(frombyte(getIdAsByte(u)).toString());

印刷品:

1ae004cf-0f48-469f-8a94-01339afaec41
8b5d1a71-a4a0-3b46-bec3-13ab9ab12e8e

问题答案:
public class UuidUtils {
  public static UUID asUuid(byte[] bytes) {
    ByteBuffer bb = ByteBuffer.wrap(bytes);
    long firstLong = bb.getLong();
    long secondLong = bb.getLong();
    return new UUID(firstLong, secondLong);
  }

  public static byte[] asBytes(UUID uuid) {
    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(uuid.getMostSignificantBits());
    bb.putLong(uuid.getLeastSignificantBits());
    return bb.array();
  }
}
@Test
public void verifyUUIDBytesCanBeReconstructedBackToOriginalUUID() {
  UUID u = UUID.randomUUID();
  byte[] uBytes = UuidUtils.asBytes(u);
  UUID u2 = UuidUtils.asUuid(uBytes);
  Assert.assertEquals(u, u2);
}

@Test
public void verifyNameUUIDFromBytesMethodDoesNotRecreateOriginalUUID() {
  UUID u = UUID.randomUUID();
  byte[] uBytes = UuidUtils.asBytes(u);
  UUID u2 = UUID.nameUUIDFromBytes(uBytes);
  Assert.assertNotEquals(u, u2);
}


 类似资料:
  • 我的应用程序基于Spring reactive,mysql。当我试图从mysql数据库中获取数据时,我收到一个错误“org.springframework.core.convert.ConverterNotFoundException:找不到能够从类型[java.nio.HeapByteBuffer]转换为类型[java.util.UUID]的转换器” 我尝试将转换器添加到实现WebFLuxCon

  • 我试图通过API发送数据,但得到了类型错误:无法将字节转换为str。我理解这意味着我需要将部分代码转换为字节,但我不确定如何执行。我尝试在前面添加b或使用字节(“数据”),但可能将它们放在了错误的区域。 这是问题行: 我不确定什么和如何转换为字节。

  • 问题内容: 问题是如何将ByteArray转换为GUID。 以前,我将GUID转换为字节数组,经过一些事务后,我需要将GUID从字节数组中退回。我怎么做。虽然无关紧要,但是从Guid到byte []的转换如下 但是我该如何将其转换回来? 我尝试了这种方法,但是没有返回相同的值 任何帮助将不胜感激。 问题答案: 该方法将名称转换为UUID。在内部,它使用哈希和一些黑魔法将任何名称(即字符串)转换为有

  • 我想将字节转换为JsonObject。我试着这样: 但我遇到编译器错误: 我怎么能这样呢?

  • 问题内容: 在Java中,是否有一种简单而优雅的方法将无符号字节值转换为有符号字节值?例如,如果我所拥有的只是int值240(二进制(24位+ 11110000)= 32bits),如何获得该int的带符号值? 问题答案: 除了,Java没有其他无符号值。考虑以下代码段: 结果将为-1,因为最低的8位已复制到byte变量中。

  • 问题内容: 我想在GO中将字符串数组转换为字节数组,以便可以将其写到磁盘上。将字符串数组()解码为字节数组()的最佳解决方案是什么? 我正在考虑对字符串数组进行两次迭代,第一个迭代以获得字节数组所需的实际大小,然后第二个迭代写入每个元素的长度和实际字符串()。 解决方案必须能够以其他方式进行转换;从一个到一个。 问题答案: 让我们忽略一个事实,那就是走一秒钟。您需要做的第一件事是将序列化格式编组为