将ByteArray转换为UUID java

时间:2014-06-25 12:41:23

标签: java bytearray uuid

问题是如何将ByteArray转换为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();
    }

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:22)

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

您必须改为使用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();
}

答案 1 :(得分:7)

尝试:

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

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

答案 2 :(得分:2)

尝试反向执行相同的过程:

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

对于构建和解析byte [],你真的需要考虑byte order

答案 3 :(得分:0)

Sub openppt() Dim ppPres As PowerPoint.Presentation Set ppApp = New PowerPoint.Application Todate = Date Sheets("SupportData").Select ActiveSheet.Shapes.Range(Array("Object 7")).Select Selection.Verb Verb:=3 activeSlide.SaveAs "C:\Release_Review\" & "Release_Review" & Todate & ".pptx" End Sub 中的UuidUtil中有一个方法可以做到这一点。

uuid-creator

另一种方法则相反。

UUID uuid = UuidUtil.fromBytesToUuid(bytes);

https://github.com/f4b6a3/uuid-creator