将ByteArray转换为UUID java

 男人好好疼h爱你的女人吧 发布于 2023-01-07 17:31

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

任何帮助将不胜感激.

2 个回答
  • 该方法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();
    }
    

    2023-01-07 17:34 回答
  • 尝试:

    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类型.

    2023-01-07 17:34 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有