我试图在Java中复制以下.NET代码
https://github.com/LogosBible/Logos.Utility/blob/master/src/Logos.Utility/GuidUtility.cs
我在Java中编写了等效的代码,但是我得到了最终GUID / UUID
的不同值我为Java所做的更改 - 要将UUID转换为字节数组(上面代码中的步骤3),我使用了以下内容 - GUID to 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?