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