用于获取 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 术语的结构
- 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 的应用
- 用于为 Web 应用程序创建会话 ID ,这也用于创建事务 ID
- 它扩展了对象类
- 用于创建随机文件名
- 实现Serializable和Comparable接口
- 用于为数据库表生成主键
生成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);
}
}
输出: