3

我正在尝试在 Java 中复制以下 .NET 代码

https://github.com/LogosBible/Logos.Utility/blob/master/src/Logos.Utility/GuidUtility.cs

我已经用 Java 编写了等效代码,但我得到了最终 GUID/UUID 的不同值

我为 Java 所做的更改 - 要将 UUID 转换为字节数组(上面代码中的第 3 步),我使用了以下 - GUID 到 ByteArray

    ByteBuffer bb = ByteBuffer.wrap(new byte[16]);
    bb.putLong(namespaceId.getMostSignificantBits());
    bb.putLong(namespaceId.getLeastSignificantBits());
    byte[] namespaceBytes = bb.array()

对于散列部分(第 4 步),我使用 apache-commons message-digest 类

    final MessageDigest sha = MessageDigest.getInstance("SHA-1");
    final ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    outputStream.write(namespaceBytes);
    outputStream.write(nameBytes);
    sha.update(outputStream.toByteArray());
    final byte[] hash = sha.digest();

其余代码完全相同。

然而,在经历了这里发布的关于 Java 的有符号字节数组和 .NET 的无符号字节的其他问题之后。我已经记录了我在每个点得到的输出,并且在这两个步骤中我没有看到输出中有任何相似之处。

在阅读了几个线程之后,我意识到 GUID.toByteArray() 方法的工作方式与我在 java 中转换值的方式不同。.NET 中的字节数组也是无符号的,Java 不支持这种类型。如何修复代码以使其适用于 Java?

4

0 回答 0