java - 将 Java UUID 对象转换为 .NET GUID 字符串

标签 java c# mongodb uuid guid

在接收 java.util.UUID 对象的 Java 方法中,我想将该对象显示为 .NET/C# 格式 (CSUUID) 的字符串。

目前我只能以Java格式(JUUID)显示它:

static String GetStringFromUuid (java.util.UUID myUuid){
    return myUuid.toString();
}

Current output: "46c7220b-1f25-0118-f013-03bd2c22d6b8"

Desired output: "1f250118-220b-46c7-b8d6-222cbd0313f0"


上下文:

  • UUID 存储在 MongoDB 中,并使用 Java ETL 程序 Talend(tMongoDBInput 组件)检索。

  • 在 Java 程序中,该方法已将 UUID 作为 java.util.UUID 对象接收(我无法直接访问程序中的 BinData)。

  • 我需要以 C# 格式显示 UUID,因为其他程序已经以 C# 格式显示 UUID。
  • 如果可能有用,示例数据存储在 MongoDB 中,如下所示: BinData(3,"GAElHwsix0a41iIsvQMT8A==")
  • 我需要一个 Java 解决方案。

最佳答案

Guid 由 16 个字节表示。由于各种原因,当您调用 toString 时,Java 和 .NET 都不会按顺序打印这些字节。例如,如果我们从您的问题中查看 base-64 编码的 guid:

GAElHwsix0a41iIsvQMT8A==

十六进制形式看起来像这样:

18-01-25-1f-0b-22-c7-46-b8-d6-22-2c-bd-03-13-f0

Java toString 产生这个(如果我们按上面的格式):

46-c7-22-0b-1f-25-01-18-f0-13-03-bd-2c-22-d6-b8

.NET ToString 产生这个:

1f-25-01-18-22-0b-46-c7-b8-d6-22-2c-bd-03-13-f0

如果你仔细看一下 - 你会注意到 java 和 .NET 字符串都表示相同的 16 个字节,但这些字节在输出字符串中的位置不同。因此,要从 Java 表示形式转换为 .NET,您只需要对它们重新排序。示例代码(我不懂java,所以可能可以用更好的方式完成,但仍然可以达到预期的结果):

static String GetStringFromUuid (java.util.UUID myUuid){
    byte[] bytes = new byte[16];
    // convert uuid to byte array
    ByteBuffer bb = ByteBuffer.wrap(bytes);
    bb.putLong(myUuid.getMostSignificantBits());
    bb.putLong(myUuid.getLeastSignificantBits());
    // reorder
    return String.format("%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
        bytes[4],bytes[5],bytes[6],bytes[7],
        bytes[2],bytes[3],bytes[0],bytes[1],
        bytes[15],bytes[14],bytes[13],bytes[12],
        bytes[11],bytes[10],bytes[9],bytes[8]);
}

关于java - 将 Java UUID 对象转换为 .NET GUID 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49077014/

相关文章:

c# - WPF 模态进度窗口

c# - 打印服务器 - 想要捕获打印命令

c# - Parallel.For 循环的完整 CPU 使用率

mongodb - sudo chown -R `id -u`/data/db 的含义

mongodb - 如何从 Retool 更新 Mongodb 中的One?

java - Swing Java 中 JComponent 周围奇怪的黑色边框

Java 8 日期时间 : get start of day from ZonedDateTime

java - Android 转弯方向(不是导航)

java - Java 构造函数中的日期

mongodb - 连接到 mLab 上的 MongoDB 数据库身份验证失败