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