我需要将一个在.NET中生成的Guid传递给Java应用程序。我使用Guid.ToByteArray()将其作为一个字节[]存储在磁盘上,然后将其读入Java并将其转换为UUID。为此,我复制了一个采用byte []的UUID的(private)构造函数的实现:
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
看起来前三组的字节顺序是相反的,而最后两组的排序是相同的。
由于我期望Guid和UUID的toString()产生相同的结果,有没有人知道如何正确地将.NET Guid读入Java UUID?
编辑:澄清,执行不是我自己的。它是java.util.UUID类的私有构造函数,它使用一个字节[],我将它复制以用于从磁盘读取字节[]到UUID中。
我不想使用字符串存储Guid,因为我正在存储很多它们,这似乎是浪费空间。
Russell Troywest的链接至少澄清了Guid的前几组出来的原因,而下半场则保持同样的顺序。问题是,我可以依靠.NET总是按照相同的顺序生成这些字节吗?