Мне нужно передать Guid, созданный в .NET, в приложение 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;
}
Однако, когда я проверяю UUID с помощью toString()
, UUID Java отличается от .NET Guid.
Например, руководство по .NET.
888794c2-65ce-4de1-aa15-75a11342bc63
превращается в Java UUID
c2948788-ce65-e14d-aa15-75a11342bc63
Кажется, что порядок байтов в первых трех группах обратный, в то время как порядок в последних двух группах тот же.
Поскольку я ожидаю, что toString()
как Guid, так и UUID дадут один и тот же результат, кто-нибудь знает, как мне правильно прочитать .NET Guid в Java UUID?
Редактировать. Чтобы уточнить, это не моя реализация. Это закрытый конструктор класса java.util.UUID
, который принимает byte[]
, который я скопировал для использования с целью чтения byte[] с диска в UUID.
Я не хочу использовать строки для хранения гуидов, так как я храню их много, и это кажется пустой тратой места.
Ссылка Рассела Тройвеста, по крайней мере, проясняет, почему первая пара групп Гида выходит в обратном порядке, а вторая половина остается в том же порядке. Вопрос в том, могу ли я полагаться на то, что .NET всегда генерирует эти байты в одном и том же порядке?