Java 和 UUID:编写可靠的唯一标识符

这篇具有很好参考价值的文章主要介绍了Java 和 UUID:编写可靠的唯一标识符。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、简介

UUID(通用唯一识别码)是一种用于唯一标识分布式系统中的对象的标准。它是一个128位的字符串,包含了时间戳和随机数字,可以保证在分布式系统中每个对象都有一个独特的标识符,而不会发生冲突。

UUID最常见的用途是在不同的系统和平台之间传递唯一的标识符,以便于对象的识别和管理。例如,在分布式文件系统中,每个文件都有一个唯一的UUID,以便于文件的组织和管理。

UUID的主要优势是它的唯一性和跨平台性。由于UUID是由计算机生成的,因此它可以保证在全球范围内的唯一性,而且可以在不同的系统和平台之间互相转换。此外,UUID还具有良好的随机性,可以确保生成的UUID在时间上具有较好的随机性,避免了因为时间相关的问题而产生的重复标识符。

常见的UUID生成算法包括:

微软公司的全局唯一标识符(GUID):这是最广泛使用的UUID之一,可以在任何系统中使用。
Linux ext2/ext3文件系统中的UUID:这些文件系统使用UUID作为文件系统标识符。
LUKS加密分区中的UUID:在Linux中,LUKS加密分区使用UUID作为分区标识符。
GNOME、KDE、Mac OS X等操作系统中的UUID:这些操作系统中也使用UUID作为标识符。
除了在操作系统和文件系统中使用UUID,还有一些其他的应用场景也使用UUID,例如在云计算、物联网等领域,UUID可以用于标识设备、服务、数据等。

2、组成格式

UUID的组成格式是:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12)。其中,每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。

3、版本

UUID 的版本简介如下:

  • V1 (timestamp) :最早的版本,使用 Unix 时间戳作为 UUID 的一部分,时间戳不足会导致生成的 UUID 不可用。由于使用MAC地址,可以保证全球范围的唯一性。

  • V2 (timestamp) :在 v1 的基础上进行了优化,使用当前时间作为 UUID 的一部分,时间戳不足会导致生成的 UUID 不可用。同时,生成的 UUID 中也包含了更多的随机数字,提高了 UUID 的安全性。

  • V3 (namespace) :在 v2 的基础上增加了命名空间信息,可以根据不同的命名空间生成不同的 UUID。命名空间是一个16进制数字,可以包含零个、一个或多个十六进制数字。

  • V4 (random) :也是在 v2 的基础上进行了优化,生成的 UUID 更加随机化,避免了因为生成的 UUID 重复而产生的问题。

  • V5 (namespace) :在 v3 的基础上增加了命名空间信息,并将散列算法从 MD5 更改为 SHA1,提高了 UUID 的安全性和散列性能。

UUID 的版本按照升级顺序分为 v1、v2、v3、v4、v5,每个版本都有自己的特点和适用场景。在实际应用中,可以根据需要选择合适的版本来生成唯一的标识符。

4、Java 实现完整示例

package com.csdn.woniu.example;

import java.nio.charset.StandardCharsets;
import java.util.UUID;

/**
 * <h1>UUID 示例代码</h1>
 * Created by woniu
 * */
public class UUIDExample {

    /***
     * <h2>空校验</h2>
     * @param str 需要判断的值
     */
    public static boolean isEmpty(Object str) {
        return null == str || "".equals(str);
    }

    /***
     * <h2>String 转 byte</h2>
     * @param str 需要转换的字符串
     */
    public static byte[] getBytes(String str){
        if (isEmpty(str)) {
            return null;
        }

        try {
            return str.getBytes(StandardCharsets.UTF_8);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    /***
     * <h2>生成 UUID</h2>
     * 版本 4(伪随机数生成器)的 UUID
     */
    public static String getUUID(){
        UUID uuid = UUID.randomUUID();
        return uuid.toString();
    }

    /***
     * <h2>生成 UUID</h2>
     * 版本 3 的实现,对于给定的字符串(name)总能生成相同的UUID
     */
    public static String getUUID(String name){
        if (isEmpty(name)) {
            return getUUID();
        }

        UUID uuid = UUID.nameUUIDFromBytes(getBytes(name));
        return uuid.toString();
    }

    public static void main(String[] args) {
        System.out.println("版本 4,随机:" + getUUID());
        System.out.println("版本 3,您好:" + getUUID("您好"));
        System.out.println("版本 3,您好:" + getUUID("您好"));
        System.out.println("版本 3,蜗牛:" + getUUID("蜗牛"));
    }
}

运行结果如下:

版本 4,随机:a3cf9138-1fd2-428e-b78c-b334cc5da42d
版本 3,您好:f070aa69-f8d7-3650-9a15-a0f9d0878a41
版本 3,您好:f070aa69-f8d7-3650-9a15-a0f9d0878a41
版本 3,蜗牛:d905ce22-1175-3b2d-ae23-d97c9c26bc0c

对于相同的命名空间总是生成相同的UUID,版本为3,命名空间为 “您好” 时生成的 UUID 总是为 f070aa69-f8d7-3650-9a15-a0f9d0878a41文章来源地址https://www.toymoban.com/news/detail-440800.html

本文教程到此结束,祝愿小伙伴们在编程之旅中能够愉快地探索、学习、成长!

到了这里,关于Java 和 UUID:编写可靠的唯一标识符的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • STM32唯一设备标识符UID的读取

    1.UID的介绍 STM32微控制器(MCU)的唯一UID(Unique ID)是一个独特的标识符,用于区分不同的芯片。每个STM32芯片都有一个唯一的UID,由96位的数据组成。这个唯一UID不是由用户编程设置的,而是在制造过程中由芯片上的专用电路生成的。 STM32 MCU的唯一UID通常由三个32位的数据组

    2024年02月04日
    浏览(29)
  • 使用序列(Sequence)在 Oracle 数据库中管理唯一标识符

    目录 1. 创建序列 2. 使用序列生成唯一值 3. 序列的常见应用场景 结论 简介: 在 Oracle 数据库中,序列(Sequence)是一种强大的工具,用于生成唯一的数值标识符。序列提供了一种简单而高效的方式来管理表的主键或其他需要唯一值的列。本文将介绍 Oracle 中序列的用法,包括

    2024年02月05日
    浏览(34)
  • 第二章 02Java基础-数据类型、标识符、键盘录入

    今天我们学习Java基础,数据类型、标识符、键盘录入 1.数据类型大体上可以分为两类,一类是基本数据类型,另外一类是引用数据类型。今天我们学习基本数据类型。 2.基本数据类型可以分为四类八种,整数(byte short int long)、浮点数(float double)、字符(char)和布尔(

    2024年02月06日
    浏览(28)
  • Java程序设计入门教程--标识符和关键字

    目录 标识符 标识符的约定 1. 定义 用来 标识类名,变量名,方法名,类型名,数组名,文件名的有效序列称为标识符。简单地说,标识符就是一个名字 。 2. 标识符命名规则 (1)大小写有别,例如 a 和 A 是两个变量, Boy 和 boy 是不同的标识符。 (2)长度任意。 (3)可以

    2024年02月07日
    浏览(28)
  • 【Java探索之旅】我与Java的初相识(完):注释,标识符,关键字

    🎥 屿小夏 : 个人主页 🔥个人专栏 : Java入门到精通 🌄 莫道桑榆晚,为霞尚满天! 在Java编程中,注释、标识符和都是非常重要的概念。注释可以帮助我们更好地理解和维护代码,而规范的标识符命名和避免冲突可以提高代码的可读性和可维护性。本文将介

    2024年02月04日
    浏览(34)
  • 【JAVA】数据类型,类型转换与提升,运算符,标识符命名规则

    🍉内容专 栏:【JAVA从0到入门】 🍉本文脉络:数据类型,类型转换与提升,运算符,标识符命名规则 🍉本文作者:Melon_西西 🍉发布时间 :2023.7.12 目录  1. 字面常量 2. 数据类型:四类八种  3.类型转换 3.1 自动类型转换(隐式) 自动类型转换: 3.2 强制类型转换(显式) 强制类

    2024年02月15日
    浏览(32)
  • 华为---OSPF Router-ID:OSPF路由器标识符(Router Identifier)简介及示例配置---(OSPF Router-ID如何产生?为什么必须在整个路由选择域内保持唯一)

      OSPF Router-ID :路由器标识符(Router Identifier),在OSPF域中唯一地标识一台路由器。         OSPF协议使用Router-ID作为路由器的身份标示,如果在启动这些路由协议时没有指定Router-ID,则路由协议进程可能无法正常启动;在OSPF区域中必须保证Router-ID唯一,不然OSPF无法正确识别

    2024年02月05日
    浏览(32)
  • 【Java基础教程】(三)程序概念篇 · 上:探索Java编程基础,注释、标识符、关键字、数据类型~

    掌握Java中标识符的定义; 掌握Java中数据类型的划分以及基本数据类型的使用原则; 掌握Java运算符的使用; 在编写程序时,为了提高程序的可维护性,我们可以在代码中添加注释。 注释是一种说明性的文字,不会被编译器编译执行 。 Java提供了三种注释形式: // :单行注

    2024年02月12日
    浏览(27)
  • 错误C2065:未声明的标识符 - 解决C++中的未声明标识符错误

    错误C2065:未声明的标识符 - 解决C++中的未声明标识符错误 在C++编程中,错误C2065是一种常见的编译错误,它表示使用了一个未声明的标识符。通常情况下,这个错误是由于忘记包含必要的头文件或者拼写错误导致的。本文将介绍如何解决这个错误,并提供相应的源代码示例

    2024年02月06日
    浏览(33)
  • 初识标识符

    abstract assert boolean break byte case catch char class const continue default do double else enum extends final finally float for goto if implementis import instanceof int interface long native new package private protected public return strictfp short static super switch synchronized this throw throws transient try void volatile while   java所有的组成

    2024年02月11日
    浏览(39)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包