Полученное byte[]
- это именно то, что и должно быть: последовательность из 16 байтов или меньше, в соответствии с определением столбца.
Какое представление UID вы пытаетесь создать? - Они обычно представлены не как Base64, а как Hex.
Попытка преобразовать byte[]
в String
напрямую, безусловно, не , что вы хотите.
Если вы выполните итерацию по массиву, конвертируя каждый байт в его (2-значное!) Шестнадцатеричное представление (String) и объединяете эти строки в строку длиной 32, результат, вероятно, будет выглядеть намного больше, чем вам нужно. *
Если вы хотите использовать java.util.UUID
, вы должны построить два значения long
из первого и второго набора из восьми байтов, соответственно, для передачи конструктору.
Edit:
В java.util.UUID
вы можете найти:
/*
* Private constructor which uses a byte array to construct the new UUID.
*/
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;
}
У меня нет идеи, почему это не public
...
Учитывая ваш byte[]
, вы можете создать два long
значения, необходимые для конструктора UUID(long,long
, именно с этим кодом.
Вам нужно будет только обратить внимание на порядок байтов в массиве, который вы получаете из БД; который является младшим значащим байтом , который является старшим значащим байтом . (Возможно, либо [0] и [15], либо [15] и [0].)
Если у вас есть экземпляр UUID
, вы можете использовать его toString()
, чтобы получить общее представление.
Если вы не хотите использовать UUID
, вам придется конвертировать байты в шестнадцатеричный код для вывода и, возможно, вставить несколько черточек для удобства чтения.