将 ByteArray 转换为 UUID java

2022-09-01 20:02:20

问题是如何将字节数组转换为 GUID。

以前,我将 guid 转换为字节数组,在一些事务之后,我需要从字节数组返回我的 guid。我该怎么做。虽然无关紧要,但从Guid到byte[]的转换如下所示

    public static byte[] getByteArrayFromGuid(String str)
    {
        UUID uuid = UUID.fromString(str);
        ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
        bb.putLong(uuid.getMostSignificantBits());
        bb.putLong(uuid.getLeastSignificantBits());

        return bb.array();
    }

但是我如何将其转换回去?

我尝试了此方法,但它没有返回相同的值

    public static String getGuidFromByteArray(byte[] bytes)
    {
        UUID uuid = UUID.nameUUIDFromBytes(bytes);
        return uuid.toString();
    }

任何帮助将不胜感激。


答案 1

该方法将名称转换为 UUID。在内部,它应用了散列和一些黑魔法,将任何名称(即字符串)转换为有效的UUID。nameUUIDFromBytes()

您必须改用构造函数:new UUID(long, long);

public static String getGuidFromByteArray(byte[] bytes) {
    ByteBuffer bb = ByteBuffer.wrap(bytes);
    long high = bb.getLong();
    long low = bb.getLong();
    UUID uuid = new UUID(high, low);
    return uuid.toString();
}

但是由于您不需要UUID对象,因此只需执行十六进制转储即可:

public static String getGuidFromByteArray(byte[] bytes) {
    StringBuilder buffer = new StringBuilder();
    for(int i=0; i<bytes.length; i++) {
        buffer.append(String.format("%02x", bytes[i]));
    }
    return buffer.toString();
}

答案 2

尝试:

public static String getGuidFromByteArray(byte[] bytes) {
    ByteBuffer bb = ByteBuffer.wrap(bytes);
    UUID uuid = new UUID(bb.getLong(), bb.getLong());
    return uuid.toString();
}

您的问题是只创建类型 3 UUID,但您需要任何 UUID 类型。UUID.nameUUIDFromBytes(...)