c# - 如何将 .NET Guid 读入 Java UUID

标签 c# java .net guid uuid

我需要将 .NET 中生成的 Guid 传递给 Java 应用程序。我用 Guid.ToByteArray()将其作为 byte[] 存储在磁盘上,然后将其读入 Java 并将其转换为 UUID。为此,我复制了 UUID 的(私有(private))构造函数的实现,该构造函数采用 byte[]。 :

private UUID(byte[] data) {
    long msb = 0;
    long lsb = 0;
    assert data.length == 16;
    for (int i=0; i<8; i++)
        msb = (msb << 8) | (data[i] & 0xff);
    for (int i=8; i<16; i++)
        lsb = (lsb << 8) | (data[i] & 0xff);
    this.mostSigBits = msb;
    this.leastSigBits = lsb;
}

但是,当我使用 toString() 检查 UUID 时,Java UUID 与 .NET Guid 不同。

例如,.NET Guid

888794c2-65ce-4de1-aa15-75a11342bc63

变成Java UUID

c2948788-ce65-e14d-aa15-75a11342bc63

好像前三组的字节顺序是颠倒的,而后两组的顺序是一样的。

因为我希望 toString() Guid 和 UUID 都产生相同的结果,有谁知道我应该如何正确地将 .NET Guid 读入 Java UUID?

编辑:澄清一下,实现不是我自己的。它是 java.util.UUID 的私有(private)构造函数采用 byte[] 的类,我复制它以用于将 byte[] 从磁盘读取到 UUID。

我不想使用字符串来存储 Guid,因为我存储了很多,这似乎是浪费空间。

Russell Troywest 的链接至少阐明了为什么 Guid 的前几组出现反转,而后半部分保持相同的顺序。问题是,我可以依赖 .NET 总是以相同的顺序生成这些字节吗?

最佳答案

您不能将 .Net Guid 存储为字符串并将其读入 Java 吗?这样您就不必担心字节顺序或其他任何事情。

如果不是,那么这就解释了 C# 中字节的布局方式

http://msdn.microsoft.com/en-us/library/fx22893a.aspx

关于c# - 如何将 .NET Guid 读入 Java UUID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5745512/

相关文章:

c# - 将 SQL 存储在变量中的最佳方式

c# - 需要协助 : write a small program that will turn on the computer and executes a specified program.

c# - 删除已被 WPF 控件使用的图像

java - 返回的不是类名,而是内存地址

.net - 录制编程时间 - 写入还是下载?

c# - Elasticsearch中的每日新索引

具有调用者工作窃取的自定义池的 Java parallelStream()?

java - 如何在 Java 11 中关闭打开的程序后反序列化对象

c# - 人脸识别检测情绪

c# - 使用参数转换数据类型 - ChangeType() 范围问题