Мне нужно передать Guid, который был сгенерирован в .NET для Java-приложения. Я использую Guid.ToByteArray()
для хранения его на диске как byte[]
, затем прочитайте его в Java и преобразуйте его в UUID. Для этого я скопировал реализацию (private) конструктора 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 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.
Я не хочу использовать строки для хранения Гидов, поскольку я храню их много, и это кажется пустой тратой пространства.
Ссылка Russell Troywest, по крайней мере, разъясняет, почему первые пары групп Guid выходят в обратном направлении, а вторая половина остается в том же порядке. Вопрос в том, могу ли я зависеть от .NET всегда, генерируя эти байты в том же порядке?