UUID转16字节数组(Java)

news2024/11/15 8:58:23

最近在写协议的时候,遇到需要将一个36字符长度的UUID转为长度为16的字节数组;

这样处理的话那我们就需要保证唯一性和可还原;

于是我使用了下面的方式:

     /**
     * uuid转16字节数组
     *
     * @param uuidStr
     * @return
     */
    private static byte[] getBytesByUUID(String uuidStr) {
        UUID uuid = UUID.fromString(uuidStr);
        long mostSignificantBits = uuid.getMostSignificantBits();
        long leastSignificantBits = uuid.getLeastSignificantBits();
        ByteBuffer buffer = ByteBuffer.allocate(16);//开辟16个字节的空间
        buffer.putLong(mostSignificantBits);
        buffer.putLong(leastSignificantBits);
        return buffer.array();
    }

    /**
     * 方式2:原因是uuid的- 对唯一性没有影响
     *
     * @param uuidStr
     * @return
     */
    private static byte[] getBytesByUUIDOther(String uuidStr) {
        String replace = uuidStr.replace("-", "");
        byte[] bytes1 = HexUtils.fromHexString(replace);//16进制转字节数组
        return bytes1;
    }

还原:

    /**
     * 16位bytes 转uuid
     * @param bytes
     * @return
     */
    public static String getUUIDStrByBytes(byte[] bytes) {
        ByteBuffer buffer = ByteBuffer.wrap(bytes);
        long most = buffer.getLong();
        long least = buffer.getLong();
        UUID uuid = new UUID(most, least);
        return uuid.toString();
    }

测试一下:

    public static void main(String[] args) throws NoSuchAlgorithmException {

        byte[] bytes = getBytesByUUID("56ad1015-ac93-46dd-8712-9fc4d9ab0171");
        System.out.println("uuid 转 字节数组 " + Arrays.toString(bytes));

        byte[] uuidOther = getBytesByUUIDOther("56ad1015-ac93-46dd-8712-9fc4d9ab0171");
        System.out.println("uuid 转 字节数组 other= " + Arrays.toString(uuidOther));

        String uuidStr = getUUIDStrByBytes(bytes);
        System.out.println("16字节数组转 uuid = " + uuidStr);
    }
    }

结果:
在这里插入图片描述

可以还原已经证明了,怎么证明唯一性呢?

作证一
这个问题还有待探讨,写这个文章就是想集思广益,看看这个大模型的回答:
在这里插入图片描述
UUID是36位字符,而保证唯一的是除了- 的32字符(uuid是16进制hex 转bytes是16 byte也就是128位),
16进制hex转的bytes因为uuid唯一,所以这个字节数组也唯一;
对于高64位的值mostSigBits和低64位的值leastSigBits也就是唯一的了;(会发现两者的到的数组一样)

作证二
相信大家都知道uuid是唯一的那么,uuid判断唯一的方法一定可以作为依据;
从Java中util下的的UUID的源码来看:
在这里插入图片描述
它通过比较uuid的两个属性来确定两个uuid是否相同,
那么我对这两个属性进行转byte数组并组成一个16长度的bytes数组是不是也可以确定它的唯一性呢?(UUID底层也懒得研究)

或者大家有什么更好的方法来实现转换且能证明唯一性呢?
期待大佬们的补充。。。。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1131450.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国产服务器安装onlyoffice详细教程

1.通过docker安装onlyoffice 找一台能访问互联网的服务器下载onlyoffice镜像 sudo docker pull onlyoffice/documentserver查看镜像 docker images 启动onlyoffice docker run -itd \ --name onlyoffice1 \ --restart always \ -p 8099:80 \ -v /data/docker/onlyoffice/lo…

浅谈食品加工厂能耗情况分析平台解决方案

叶根胜 安科瑞电气股份有限公司 上海嘉定 201801 摘要:本文对某小型食品加工厂能源消耗进行了评价,分析了该工厂节能减排的潜力空间。有关节能减排效率的因素包括工厂的技术水准、管理方法和发展规模。依据研究提出对节能减排制度建设等方面的创新建议…

SpringCloud Alibaba【一】简单介绍

SpringCloud 提起微服务,不得不提 Spring Cloud 全家桶系列,Spring Cloud 是一个服务治理平台,是若干个框架的集合,提供了全套的分布式系统解决方案。包含了:服务注册与发现、配置中心、服务网关、智能路由、负载均衡…

生成式 AI 如何释放开发者的生产力?

生成式 AI 可以将程序员的开发速率提高两倍。技术管理者有望通过 AIGC 应用,大幅缩短四类关键开发任务的完成时间,进而提升组织生产力。 ——麦肯锡《通过生成式 AI 释放开发者生产力》 01 生成式 AI 将如何影响研发效能? 麦肯锡最近的一项实…

如果你要去拜访国外客户需要做哪些准备

由于产品不同,我们出国拜访客户的机会很少,一般出去都是受客户邀请,会同时带上设计师或者工程师,很少有独自出国的,毕竟样品是没法带的,最多只能带上画册和项目图。 想起几年前,公司要出国参展…

MIT6.5830 Lab1-GoDB实验记录(一)

MIT6.5830 Lab1-GoDB实验记录(一) – WhiteNights Site 标签:Golang, 数据库 了解接下来的实验要做什么。 实验目的 实现GoDB 从lab1开始一直到实验结束,我们的目的只有一个–实现GoDB,一个基础的数据库管理系统。而…

派克斯电脑全局改IP如何辅助捉妖游戏

捉妖游戏是一款非常受欢迎的手机游戏,玩家需要通过探索地图来捉到各种可爱的妖精。为了让游戏更具趣味性,玩家可以通过地图制作来设计自己的捉妖之旅。在这篇教程中,我们将向您展示如何使用电脑全局软件工具——派克斯,来制作捉妖…

echarts案例之仪表盘如何单独设置指针颜色?

一、此案例基于Vue3ts,效果展示: 二、单个属性的值: 1、单独设置指针的颜色 series:[ ...... { ...... itemStyle: { color: rgba(161, 255, 249, 1), }, ...... } ...... ] 2、设置最外圈数值的样式 series:[ ......…

【linux】安装openjdk8

openjdk的官网 点我就到官网 jdk8的网址 安装 yum install -y java-1.8.0-openjdk-devel 出现Complete! 就是安装完成。 验证 java -version选择对应的包 java-1.8.0-openjdk-devel 开发 Java 程序,请安装该java-1.8.0-openjdk-devel软件包。 java-1.8.0-op…

零代码开发、可视化界面!飞桨AI Studio星河社区带你玩转Prompt应用

号外号外!飞桨AI Studio星河社区上线新版文心一言专区,帮助开发者完成一言插件&大模型应用开发,与此同时推出Prompt模板库供开发者使用。 零代码开发、可视化界面!飞桨AI Studio星河社区带你玩转Prompt应用

使用Python的Flask框架开发验证码登录功能

目录 一、安装和配置Flask 二、生成验证码 三、处理用户输入和验证验证码 四、实现安全的用户认证 五、创建HTML模板 总结 验证码登录功能是现代Web应用程序中常见的安全特性之一,它有助于防止自动化机器人或恶意用户进行非法登录。在本文中,我们将…

windows添加定时任务命令

windows添加定时任务 一.schtasks命令 windows中常用来添加定时任务的命令 二.常用操作 1.添加定时任务 每天下午14:58:00执行test.bat脚本 C:\Users\DELL>schtasks /create /tn doc /tr C:\Users\DELL\Desktop\test.bat /sc DAILY /st 14:58:00 成功: 成功创建计划任务…

【期中复习】深度学习

文章目录 机器(深度)学习的四大核心要素为什么深度学习,不增加网络宽度黑盒模型的问题计算图线性神经网络梯度下降学习率优化方法softmax函数用于多分类交叉熵线性回归与softmax回归的对比为什么需要非线性激活函数感知机线性回归、softmax回…

mysql-面试50题-2

一、查询数据 学生表 Student create table Student(SId varchar(10),Sname varchar(10),Sage datetime,Ssex varchar(10)); insert into Student values(01 , 赵雷 , 1990-01-01 , 男); insert into Student values(02 , 钱电 , 1990-12-21 , 男); insert into Student v…

Unity3D 打包发布时生成文件到打包目录

有时候需要自己创建批处理文件或日志文件,在启动程序的同级目录使用,减少手动操作的时间和错误率。主要使用到的是OnPostprocessBuild方法。 1、在工程中的Editor文件夹下创建脚本 2、将文件放入Plugins的相关目录 3.脚本内容 using System.Collection…

视频号视频下载教程,为视频博主提供的PC电脑版下载方法

在如今这个数字时代,视频博主们成为了社交媒体平台上的明星。他们创作出精彩纷呈的视频内容,吸引着大量粉丝的关注和喜爱。然而,对于那些想要在自己的电脑上收藏这些视频的人来说,可能需要一些技巧和工具来实现。幸运的是&#xf…

SD-WAN专线:一带一路市场布局的商业加速器

刚刚结束的“一带一路”国际合作高峰论坛再次彰显了跨境合作的重要性。在这个全球化时代,随着一带一路倡议的不断推进,企业需要更加高效、稳定的网络连接来实现与参与国家的合作。在这一背景下,SD-WAN专线成为了加速一带一路合作的新选择&…

【C++】c++引用和小细节

文章目录 一、引用的特性:引用的实质引用权限使用场景引用和指针的区别 c引用不是定义了新的对象,而是对一个已有的对象起了一个别名,如鲁迅和周树人的关系,鲁迅是周树人的笔名,两者是一个东西,只是名字不同…

2023年9月青少年机器人技术(三级)等级考试试卷-理论综合

2023年9月青少年机器人技术等级考试(三级)理论综合试卷 单选题 第 1 题 单选题 Arduino Nano主控板,通过光敏电阻控制LED灯亮度的变化。电路搭设及程序如下图所示,当光照强度逐渐增强时,LED的亮度逐渐减弱&#xff…