📜  用于获取 Linux 机器系统 UUID 的Java程序

📅  最后修改于: 2022-05-13 01:54:20.135000             🧑  作者: Mango

用于获取 Linux 机器系统 UUID 的Java程序

通用唯一标识符 (UUID)也称为全局唯一标识符 (GUID),它是 128 位数字,在所有本地系统上都是唯一的,它们也是在其他系统中创建的 UUID 上创建的。 Java UUID 类是Java.util 包的一部分。 Java UUID 类表示不可变的通用唯一标识符。 UUID 是8-4-4-4-12 个字符的组合。

UUID 由十六进制数字(每个 4 个字符)和 4 个“-”符号组成,使其长度等于 36 个字符。 UUID 可以将所有位设置为零,也称为Nil UUID

UUID的结构

UUID 术语的结构

  • time_low:时间的低 32 位
  • time_mid:中间 16 位时间
  • time_hi_and_version: MSB 中的 4 位版本,后跟时间的高 12 位
  • clock_seq_hi_and_res_clock_seq_low:最高有效位中的 1-3 位变体,后跟 13-15 位时钟序列
  • 节点: 48 位节点 ID

Java UUID 的应用

  1. 用于为 Web 应用程序创建会话 ID ,这也用于创建事务 ID
  2. 它扩展了对象类
  3. 用于创建随机文件名
  4. 实现SerializableComparable接口
  5. 用于为数据库表生成主键

生成Java UUID 的方法

版本 1:为基于时间的 UUID 生成 node() 值

在这里,该方法从 UUID 返回节点的长值,为了获取节点值,我们需要创建一个基于时间的(版本 1)UUID。它返回与 UUID 关联的节点值。它是一个 48 位节点值。它保存机器的 IEEE 802 地址(MAC 地址)。

例子:

Java
// Java program for Generating node()
// value for time based UUID
 
//import UUID package
import java.util.UUID;
public class UUIDMain {
    public static void main(String arg[])
    {
        // returns a UUID with specified value
        UUID uuid = UUID.fromString("237e9877-e79b-12d4-a765-321741963000");
       
        // returns node value
        System.out.println("Node value: "
            + uuid.node());
       
      System.out.println("UUID Version : "
                           + uuid.version());
    }
}


Java
// Java program for generating Name based UUID
 
import java.util.UUID;
public class Main {
 
    public static void main(String[] args)
    {
 
        // initialize byte array
        byte[] bs = { 1, 2, 3 };
       
        // initialize uuid using byte array
        UUID uuid = UUID.nameUUIDFromBytes(bs);
       
        System.out.println("UUID : " + uuid);
        System.out.println("UUID Version : "
                           + uuid.version());
    }
}


Java
// Java Program to get System UUID Number for linux Machine
// (Root User Login is Req for running the code)
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class Main {
 
    // Method for get System UUID for Linux Machine
    static String getLinuxSystem_UUID()
    {
        String command = "dmidecode -s system-uuid";
 
        // setting uuid to null first
        String uuid = null;
        try {
            Process SerNumProcess
                = Runtime.getRuntime().exec(command);
            BufferedReader sNumReader
                = new BufferedReader(new InputStreamReader(
                    SerNumProcess.getInputStream()));
 
            // reads the uuid line by line to separate the
            // uuid into 4 parts
            uuid = sNumReader.readLine().trim();
 
            SerNumProcess.waitFor();
            sNumReader.close();
        }
        catch (Exception ex) {
            System.err.println("Linux UUID Exp : "
                               + ex.getMessage());
            uuid = null;
        }
        finally {
            return uuid;
        }
    }
 
    public static void main(String[] args)
    {
        // generates uuid for linux system
        String system_uuid = getLinuxSystem_UUID();
 
        System.out.println("Linux System UUID Number : "
                           + system_uuid);
    }
}



输出
Node value: 55075465998336
UUID Version : 1

版本 2:基于名称的 UUID

一种静态工厂方法,用于使用指定的字节数组获取基于名称的 UUID。它使用可想象的广播意义上的“名称”和指示所使用名称类型的 UUID。

例子:

Java

// Java program for generating Name based UUID
 
import java.util.UUID;
public class Main {
 
    public static void main(String[] args)
    {
 
        // initialize byte array
        byte[] bs = { 1, 2, 3 };
       
        // initialize uuid using byte array
        UUID uuid = UUID.nameUUIDFromBytes(bs);
       
        System.out.println("UUID : " + uuid);
        System.out.println("UUID Version : "
                           + uuid.version());
    }
}


输出
UUID : 5289df73-7df5-3326-bcdd-22597afb1fac
UUID Version : 3

Linux 机器的 UUID

以上两种方式都可以用来为Linux系统生成UUID。要为 Linux 机器生成系统 UUID,在生成 UUID 之前需要一些先决条件。

  • 应该安装Java Development Kit(JDK),最新版本在这里工作会更好
  • 需要设置 Vim 或 Gedit 编辑器来编译和运行代码。
  • 使用 Vim 编辑器进行编译、保存、运行和编辑程序所需的基础知识。
  • 在 Linux 命令的帮助下,在 Vim 编辑器和 Linux 内核/终端中运行代码的知识。

对于下面给出的代码,Vim Editor 用于编译和运行程序。 UUID 是分区中使用的唯一标识符,用于在 Linux 操作系统中唯一标识分区。 UUID 是磁盘分区本身的属性。

在下面的代码中,我们导入了 Buffer reader 和 Input Stream Reader 包,然后我们在 String 方法的帮助下生成一个随机 UUID,从中获取输入并生成 UUID。

Java

// Java Program to get System UUID Number for linux Machine
// (Root User Login is Req for running the code)
 
import java.io.BufferedReader;
import java.io.InputStreamReader;
 
public class Main {
 
    // Method for get System UUID for Linux Machine
    static String getLinuxSystem_UUID()
    {
        String command = "dmidecode -s system-uuid";
 
        // setting uuid to null first
        String uuid = null;
        try {
            Process SerNumProcess
                = Runtime.getRuntime().exec(command);
            BufferedReader sNumReader
                = new BufferedReader(new InputStreamReader(
                    SerNumProcess.getInputStream()));
 
            // reads the uuid line by line to separate the
            // uuid into 4 parts
            uuid = sNumReader.readLine().trim();
 
            SerNumProcess.waitFor();
            sNumReader.close();
        }
        catch (Exception ex) {
            System.err.println("Linux UUID Exp : "
                               + ex.getMessage());
            uuid = null;
        }
        finally {
            return uuid;
        }
    }
 
    public static void main(String[] args)
    {
        // generates uuid for linux system
        String system_uuid = getLinuxSystem_UUID();
 
        System.out.println("Linux System UUID Number : "
                           + system_uuid);
    }
}


输出:

Linux 机器的系统 UUID